generics - Scala 类无法覆盖扩展 java.util.comparator 的 Java 接口(interface)中的比较方法

标签 generics inheritance scala types raw-types

我目前正在开发一个 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/

相关文章:

java - 如何实现 ArrayList 将 "Room"对象添加到 "House"对象列表中?

c++ - 虚函数不进入基类

javascript - 如何从核心 OpenERP 6.1 继承 javascript

scala - 依赖方法类型和类型类

scala - 为什么 Scala 隐式转换在这里使用两个参数而不是一个参数?

java - java中泛型子类的行为

c# - Method.Invoke 因参数计数不匹配而失败

c# - 继承上下文时避免从基本 EF Core 3.0 模型重新建模对象

scala - 类型不匹配,预期 : T, 实际:T

java - 庞大的 Java 类层次结构中繁琐的泛型声明