У меня есть следующий класс:Scala общий класс [_] Параметр
class MyClass[T <: Enum[T]](val clazz: Class[T]){
def dummy = println(clazz.toString)
}
и следующий метод, который предполагается создать MyClass
объекты:
def createMyClass(clazz: Class[_]) =
if(clazz.isEnum)
new MyClass(clazz) //compile error is here
else throw new IllegalArgumentException(s"$clazz is not an enum")
Но он отказывается компилировать. Фактически мы передаем объект Class[_]
, который не удовлетворяет ограничениям типа. Есть ли способ сказать компилятору, что у нас есть Class
, представляющий Enum
.
В Java я бы просто сделал кастинг, но я полагаю, что у Scala есть лучший способ справиться с такими вещами.
КСТАТИ
new MyClass(clazz.asInstanceOf[Class[Enum[_]]])
не работает либо
Я не могу изменить подписи методы.
Отлично, спасибо большое! – stella