gpt4 book ai didi

java - 如何在Scala中实现扩展Comparable且没有特定类型的Java接口(interface)?

转载 作者:行者123 更新时间:2023-12-02 14:44:42 27 4
gpt4 key购买 nike

我在 Scala 项目中使用 Java 库,它的界面如下所示:

public interface A extends Comparable {
String getSomething();
}

请注意,库实现没有为 Java 的 Comparable<T> 指定任何特定类型。界面。

在我的 Scala 代码中,我想像这样创建 A 的实例:

object AFactory {
def getA: A = new A {
override def getSomething: String = "test"
override def compareTo(o: ???): Int = -1
}
}

不幸的是,我不确定为 ??? 指定什么类型。有谁知道我如何实现这个接口(interface)并让它编译?

最佳答案

没有直接的方法可以做到这一点。让您的代码针对 java5 之前的代码运行的一种方法是使用 Java 桥接方法:

public abstract class B implements A {
@Override
public int compareTo(Object o) {
return 0;
}
}

object AFactory {
def getA: A = new B {
override def getSomething: String = "test"
}
}

如果您不想在 Java 中实现 compareTo。您可以引入一个桥接方法并在 scala 中实现该桥接方法:

public abstract class B implements A {
@Override
public int compareTo(Object o) {
return compareToBridge(o);
}

protected abstract int compareToBridge(Object o);
}

object AFactory {
def getA: A = new B {
override def getSomething: String = "test"

override def compareToBridge(o: Any): Int = ???
}
}

如果不使用桥接方法,我认为没有更好的方法来解决这个问题。

关于java - 如何在Scala中实现扩展Comparable且没有特定类型的Java接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58852737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com