Scala 类无法覆盖扩展 java.util.comparator 的 Java 接口中的比较方法
-
29-09-2020 - |
题
我目前正在开发一个 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未定义的类比较延伸误差com.compare {
我也尝试过使用 Any 和 java.lang.Object 作为类型,但到目前为止还没有运气。
非常感谢帮助:)
问候斯特凡
解决方案
它可能是不可能。如果这是错误的,我想知道。
// 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
}
.
其他提示
生成一个独立的示例是解决此类问题的第一步。
~/code/scratch/raw: cat Compare.java
interface Compare extends java.util.Comparator {
}
~/code/scratch/raw: cat MyCompare.scala
object MyCompare extends Compare {
def compare(a: AnyRef, b: AnyRef) = 0
}
~/code/scratch/raw: scalac MyCompare.scala Compare.java
MyCompare.scala:1: error: object creation impossible, since method compare in trait Comparator of type (x$1: T,x$2: T)Int is not defined
object MyCompare extends Compare {
^
诱惑是延长 Comparator[AnyRef]
直接来自 MyCompare
, , 随着 Compare
:
object MyCompare extends java.util.Comparator[AnyRef] with Compare {
def compare(a: AnyRef, b: AnyRef) = 0
}
但这会导致:
error: illegal inheritance;
self-type MyCompare.type does not conform to java.util.Comparator[AnyRef]'s selftype java.util.Comparator[AnyRef]
所以我倾向于同意这是不可能的,至少是直接的。用 Java 编写类,如果需要的话委托给 Scala。
如果您在误操势后放置[Anyref],它是否可以工作即,
class Compare extends MiscUtilities.Compare[AnyRef] {
def compare(a1:AnyRef, a2:AnyRef) = 0
}
.
我用java.util.comparator直接尝试了,编译器似乎很开心。
不隶属于 StackOverflow