我目前正在开发一个 jEdit 插件的端口,以便在 Scala 中编写所有代码。然而,我在某个时候被迫实现我自己的比较器。
我的简化代码如下:
class compare extends MiscUtilities.Compare {
def compare(obj1: AnyRef, obj2: AnyRef): Int = 1
}
从 IntelliJ 中查看时,MiscUtilities.Compare 具有以下签名
public static interface Compare extends java.util.Comparator {
int compare(java.lang.Object o, java.lang.Object o1);
}
但是,当我尝试编译我的类时,我收到一条错误消息:
错误:类比较需要是抽象的,因为类型 (x$1: T,x$2: T)Int 的特征比较器中的方法比较未定义 类比较扩展了 MiscUtilities.Compare {
我也尝试过使用 Any 和 java.lang.Object 作为类型,但到目前为止还没有成功。
非常感谢您的帮助:)
问候斯特凡
最佳答案
可能是impossible 。如果这是错误的,我想知道。
编辑:但你可以这样做:
// CompareImpl.java
abstract class CompareImpl implements MiscUtilities.Compare {
public int compare(Object o, Object o1) {
return doCompare(o, o1);
}
public abstract int doCompare(Object o, Object o1);
}
// MyCompare.scala
object MyCompare extends CompareImpl {
def doCompare(a: AnyRef, b: AnyRef) = 0
}
因此,您仍然需要编写一些 Java,但只需为每个接口(interface)编写一个简单的类,例如 MiscUtilities.Compare
。
关于generics - Scala 类无法覆盖扩展 java.util.comparator 的 Java 接口(interface)中的比较方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3329001/