我目前正在开发一个 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 作为类型,但到目前为止还没有运气。

非常感谢帮助:)

问候斯特凡

其他提示

生成一个独立的示例是解决此类问题的第一步。

 ~/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直接尝试了,编译器似乎很开心。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top