如何实现在Scala中没有特定类型可比扩展的Java接口?
我在Scala项目中使用一个Java库,它有一个如下所示的界面:如何实现在Scala中没有特定类型可比扩展的Java接口?,java,scala,generics,interface,Java,Scala,Generics,Interface,我在Scala项目中使用一个Java库,它有一个如下所示的界面: public interface A extends Comparable { String getSomething(); } 请注意,库实现如何不为Java的可比接口指定任何特定类型 在我的Scala代码中,我想创建一个类似的实例: object AFactory { def getA: A = new A { override def getSomething: String = "test"
public interface A extends Comparable {
String getSomething();
}
请注意,库实现如何不为Java的可比接口指定任何特定类型
在我的Scala代码中,我想创建一个类似的实例:
object AFactory {
def getA: A = new A {
override def getSomething: String = "test"
override def compareTo(o: ???): Int = -1
}
}
不幸的是,我不确定要为?
指定什么类型。有人知道我如何实现这个接口并编译它吗?没有直接的方法。让代码针对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中实现比较
。您可以引入桥接方法并在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 = ???
}
}
如果不使用桥接方法,我认为没有更好的方法来解决这个问题。也许可以尝试任何
?我不知道足够的Scala来帮助解决这个问题,但是没有类型参数的泛型类型被称为“原始类型”(严格来说,这只是为了向后兼容,现代代码不应该使用它们)。也许这有助于你在谷歌上搜索解决方案。当你让IDE自动完成覆盖时,它会创造一些有用的东西吗?方法丢失时的编译错误也可能提供信息。看起来可能不可能:原始类型用于1.5 Java之前的兼容性。他们很坏。停止使用它们。另请参见此处的类似问题: