簡體   English   中英

如何在 Scala 中實現擴展 Comparable 且沒有特定類型的 Java 接口?

[英]How to implement Java interface that extends Comparable with no specific type in Scala?

我在我的 Scala 項目中使用了 Java 庫,它的界面如下所示:

public interface A extends Comparable {
    String getSomething();
}

請注意庫實現如何沒有為 Java 的Comparable<T>接口指定任何特定類型。

在我的 Scala 代碼中,我想創建一個 A 的實例,如下所示:

object AFactory {
  def getA: A = new A {
    override def getSomething: String = "test"
    override def compareTo(o: ???): Int = -1
  }
}

不幸的是,我不確定要指定什么類型??? . 有誰知道我怎樣才能實現這個接口並讓它編譯?

沒有直接的方法可以做到這一點。 讓您的代碼針對 pre-java5 代碼運行的一種方法是使用 Java 橋接方法:

public abstract class B implements A {
    @Override
    public int compareTo(Object o) {
        return 0;
    }
}

object AFactory {
  def getA: A = new B {
    override def getSomething: String = "test"
  }
}

如果您不想在 Java 中實現compareTo 您可以引入橋接方法並在 scala 中實現橋接方法:

public abstract class B implements A {
    @Override
    public int compareTo(Object o) {
        return compareToBridge(o);
    }

    protected abstract int compareToBridge(Object o);
}

object AFactory {
  def getA: A = new B {
    override def getSomething: String = "test"

    override def compareToBridge(o: Any): Int = ???
  }
}

如果不使用橋接方法,我認為沒有更好的方法來解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM