Scala类无法覆盖来自Java接口的比较方法,它扩展了java.util.comparator

Ste*_*fan 5 generics inheritance types scala raw-types

我目前正在使用jEdit插件的端口来编写Scala中的所有代码.但是我被迫在某一点上实现我自己的比较器.

我的简化代码如下:

class compare extends MiscUtilities.Compare {
  def compare(obj1: AnyRef, obj2: AnyRef): Int = 1
}
Run Code Online (Sandbox Code Playgroud)

从IntelliJ查看时,MiscUtilities.Compare具有以下签名

public static interface Compare extends java.util.Comparator {        
    int compare(java.lang.Object o, java.lang.Object o1);
}
Run Code Online (Sandbox Code Playgroud)

但是当我试图编译我的课时,我得到一个错误说:

错误:类比较需要是抽象的,因为方法比较特性比较器类型(x $ 1:T,x $ 2:T)Int未定义类比较扩展MiscUtilities.Compare {

我也尝试使用Any和java.lang.Object作为类型,但到目前为止还没有运气.

非常感谢帮助:)

关心斯特凡

Ale*_*nov 6

这可能是不可能的.如果这是错的,我想知道.

编辑:但你可以这样做:

// 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
}
Run Code Online (Sandbox Code Playgroud)

所以你仍然需要编写一些Java,但每个接口只需要一个简单的类MiscUtilities.Compare.