У меня есть следующий метод Java:
public <T> void foo(Class<T> parentClass, Class<? extends T> childClass);
Я пытался использовать неявный ClassTag для вызова вышеуказанного метода, но, к сожалению, методы runtime
возвращают стертый класс, т.е. Class[_]
, что означает, что следующий код не будет работать:
import scala.reflect.classTag
def bar[A: ClassTag, B <: A : ClassTag] = foo(classTag[A].runtimeClass, classTag[B].runtimeclass)
Я могу обойти это, используя asInstanceOf
, но мне было интересно, есть ли более чистое решение. Мне действительно странно, что в стандартной библиотеке нет метода, который возвращает не стертое значение Class
из ClassTag
.
Для ясности, я ищу существующий метод (в классе ClassTag
или в другом месте) со следующей подписью:
def unerasedRuntimeClass[A: ClassTag]: Class[A] = ???