Scala泛型类[3;]参数

Scala泛型类[3;]参数,scala,enums,Scala,Enums,我有以下课程: class MyClass[T <: Enum[T]](val clazz: Class[T]){ def dummy = println(clazz.toString) } 但它拒绝编译。实际上,我们传递了类[\u]的对象,它不满足类型边界。有没有办法告诉编译器我们实际上有一个类表示枚举 在Java中,我只需要执行强制转换,但我认为Scala有更好的方法来处理这些事情 顺便说一句 也不行 我无法更改方法的签名。在T上声明具有相同类型约束的方法,然后它将编译 def

我有以下课程:

class MyClass[T <: Enum[T]](val clazz: Class[T]){
  def dummy = println(clazz.toString)
}
但它拒绝编译。实际上,我们传递了
类[\u]
的对象,它不满足类型边界。有没有办法告诉编译器我们实际上有一个
表示
枚举

在Java中,我只需要执行强制转换,但我认为Scala有更好的方法来处理这些事情

顺便说一句

也不行


我无法更改方法的签名。

T
上声明具有相同类型约束的方法,然后它将编译

def createMyClass[T <: Enum[T]](clazz: Class[T]) =
  if(clazz.isEnum) new MyClass(clazz) 
  else throw new IllegalArgumentException(s"$clazz is not an enum")

def createMyClass[T class MyClass[T def createMyClass[T在
T
上声明具有相同类型约束的方法,然后它将编译

def createMyClass[T <: Enum[T]](clazz: Class[T]) =
  if(clazz.isEnum) new MyClass(clazz) 
  else throw new IllegalArgumentException(s"$clazz is not an enum")
def createMyClass[T class MyClass[T def createMyClass[T
我无法更改方法的签名

如有必要,可以使用存在类型

def createMyClass(clazz: Class[_]) =
  if(clazz.isEnum)
    new MyClass(clazz.asInstanceOf[Class[T] forSome { type T <: Enum[T] }])
  else throw new IllegalArgumentException(s"$clazz is not an enum")
def createMyClass(clazz:Class[\uz])=
if(clazz.isEnum)
新的MyClass(clazz.asInstanceOf[Class[T]for some{type T
我无法更改方法的签名

如有必要,可以使用存在类型

def createMyClass(clazz: Class[_]) =
  if(clazz.isEnum)
    new MyClass(clazz.asInstanceOf[Class[T] forSome { type T <: Enum[T] }])
  else throw new IllegalArgumentException(s"$clazz is not an enum")
def createMyClass(clazz:Class[\uz])=
if(clazz.isEnum)
新的MyClass(clazz.asInstanceOf[Class[T]for some{type T
def createMyClass(clazz: Class[_]) =
  if(clazz.isEnum)
    new MyClass(clazz.asInstanceOf[Class[T] forSome { type T <: Enum[T] }])
  else throw new IllegalArgumentException(s"$clazz is not an enum")