2016-07-08 4 views
4

Diese Frage wurde wahrscheinlich schon gestellt.Kette von Subtypings - nur eine Syntaxbeschränkung?

Warum wird dies nicht unterstützt?

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

ich hätte dies als eine Einschränkung der Sprachsyntax abgetan, aber jetzt bin ich fürchte, es gibt eine etwas ist „tiefer“ Erklärung.

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

Antwort

2

Nested-Typ wie diese Grenzen sind unterstützt. Wenn Sie nicht möchten, U ein Parameter von MyClass sein, können Sie schreiben

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` 

diese stimmt, was Sie wollen?