子类链 - 只是语法限制?

时间:2016-07-08 12:02:13

标签: scala polymorphism

这个问题可能已经被提出过了。

为什么不支持?

class A;
class B[T];
class MyClass[T <: B[U <: A]];

我可以耸耸肩作为语言语法的一些限制但现在我担心会有一些更深层次的&#34;解释

class A;
class B[T];
class MyClass[U <: A, T <: B[U]];

1 个答案:

答案 0 :(得分:2)

支持这样的嵌套类型边界。如果您不希望U成为MyClass的参数,则可以编写

class MyClass[T <: B[_ <: A]]

class C extends A
class D extends B[C]

def x: MyClass[D] = ??? // compiles
def y: MyClass[B[C]] = ??? // compiles
def z: MyClass[B[String]] = ??? // doesn't compile because `String` is not a subtype of `A` 

这是否符合您的要求?