如何在Scala中扩展以下Java类:类A <t extends =“”可比较<?=“”super =“”t =“”>&gt;

时间:2017-04-12 11:35:06

标签: java scala

我需要扩展以下类型的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] {
}

我该如何解决这个问题?

3 个答案:

答案 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] {
}