我需要使用内部类或抽象类型作为外部类型的类型参数,例如下面的简化示例:
trait A[T <: Ordered[T]] {
}
class B extends A[C] { //<-- Compiler error, type C not found.
class C extends Ordered[C] {
}
}
我在图书馆遇到了一个非常棘手的设计问题,并且没有找到令人满意的方法来避免这种构造。我尝试了许多不同的方法,从type参数引用内部类,但无济于事。
我的问题是:
有什么方法可以从外部类的类型实参中引用内部类吗?
如果不是,是否存在排除这种情况的逻辑矛盾,还是仅仅是编译器和语言规范的限制?
首先,您需要具备C
成为内部类的资格,例如,有一个预测:
class B extends A[B#C] {
class C extends Ordered[C]
}
这会产生“非法循环引用”,因此是编译器的限制
您可以将类型构造函数参数更改A
为类型成员:
trait A {
type T <: Ordered[T]
}
class B extends A {
class T extends Ordered[T] {
def compare(that: T): Int = ???
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句