如何在Scala中扩展以下Java类:类A<;T<;?超级T>&燃气轮机;

如何在Scala中扩展以下Java类:类A<;T<;?超级T>&燃气轮机;,java,scala,Java,Scala,我需要扩展以下类型的Java类(来自库): public class A<T extends Comparable<? super T>> { } public class A您可以尝试为此嵌套类型定义别名: object B { type ComparableBySuper[LUB] = Comparable[_ >: LUB] } class B[T <: ComparableBySuper[T]] extends A[T] 对象B{ 类型Com

我需要扩展以下类型的Java类(来自库):

public class A<T extends Comparable<? super T>> {
}

public class A您可以尝试为此嵌套类型定义别名:

object B {
  type ComparableBySuper[LUB] = Comparable[_ >: LUB]
}

class B[T <: ComparableBySuper[T]] extends A[T]
对象B{
类型CompariableBySuper[LUB]=可比[\u>:LUB]
}

IntelliJ IDEA的B类[TScala插件将此代码转换为

class B[T <: Comparable[(_$1) forSome {type _$1 >: T}]] extends A[T] {
}
class B[T:T}]]扩展了A[T]{
}

这实际上是Scala称之为lambdas类型的一个很好的用法,它遵循与公认答案大致相同的方法,但避开了必须将类型i嵌套到另一个对象的要求

就Scala的所有功能而言,“正确”的方法是:

class B[T <: ({type LUB[A] = Comparable[_ >: A]})#LUB[T]] extends A[T]
class B[T:A]}#LUB[T]]扩展了A[T]

不幸的是,这段代码产生了相同的编译器错误。就是这样!非常感谢。永远不要用小写字符定义类型。@flavian当然,我只是为了一个有趣的解决方案。您只需要在#LUB之后添加类型参数[T]就可以让它编译:class B[T:A]})#LUB[T]]扩展了[T]@StefanEndrullis确实很抱歉。
class B[T <: Comparable[(_$1) forSome {type _$1 >: T}]] extends A[T] {
}
class B[T <: ({type LUB[A] = Comparable[_ >: A]})#LUB[T]] extends A[T]