1
では、以下のクラスがあります。理解Scalaの型推論とextensial種類
class MyClass[T <: Enum[T]](val clazz: Class[T]){
def dummy = println(clazz.toString)
}
及び方法
def createMyClass(clazz: Class[_]) =
if(clazz.isEnum)
new MyClass(clazz.asInstanceOf[Class[Enum[T] forSome { type T <: Enum[T] }]]) //error
else throw new IllegalArgumentException(s"$clazz is not an enum")
をしかし、それはEnum[T]
は、型の制約T <: Enum[T]
を満たすものの、コンパイルすることを拒否する。私がClass[T forSome { type T <: Enum[T] }]
と書いても動作します。
しかし、なぜ最初のケースでは機能しませんか?
これは動作します: