我需要扩展以下类型的Java类(来自库):
function setupPanelLinks() {
$(".clickablePanel").click(function() {
window.location.href = $(this).find("a.myLink").attr('href');
});
$(".clickablePanel a").click(function(e) {
e.stopPropagation();
});
}
我尝试将扩展Scala类实现为:
public class A<T extends Comparable<? super T>> {
}
不幸的是,这个Scala类不能使用Scala 2.12.1进行编译:
class B[T <: Comparable[_ >: T]] extends A[T] {
}
我该如何解决这个问题?
答案 0 :(得分:3)
您可以尝试为此嵌套类型定义别名:
object B {
type ComparableBySuper[LUB] = Comparable[_ >: LUB]
}
class B[T <: ComparableBySuper[T]] extends A[T]
答案 1 :(得分:1)
这实际上是对Scala调用类型lambdas的一种很好的用法,它遵循与接受的答案大致相同的方法,但回避了必须将类型嵌套到另一个对象的要求。
对于Scala的所有功能,“正确”的方法是:
class B[T <: ({type LUB[A] = Comparable[_ >: A]})#LUB[T]] extends A[T]
答案 2 :(得分:0)
IntelliJ IDEA的Scala插件将此代码转换为
class B[T <: Comparable[(_$1) forSome {type _$1 >: T}]] extends A[T] {
}