Scala: Как получить не стертый экземпляр класса с последствиями, не используя asInstanceOf? - PullRequest
0 голосов
/ 31 августа 2018

У меня есть следующий метод 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] = ???

...