Как получить универсальный контейнерный класс ParameterizedType в Java

Все вопросы об java-отражении универсальных типов, которые я обнаружил, касались получения параметров универсального типа. В моем случае у меня есть ParameterizedType и я хочу получить класс контейнера Generic.

Например, предположим,

ParameterizedTypeImpl.toString()

возвращается

java.util.List<test.Bar>

Теперь я хочу получить класс java.util.List.

Это может звучать немного странно для вас, но мне нужно, чтобы вы предположили, что это то, что есть!

Так что мне нужно что-то вроде

 Class cls = ((MagicCast)ParameterizedTypeImpl.mayBeAMagicHere()).someOtherMagic();
 //Now cls is of type List

Единственный способ, о котором я могу думать, - это использовать subString или regex, чтобы получить java.util.List из ParameterizedTypeImpl.toString(), а затем использовать class.forName для получения класса. Но я не знаю, насколько это портативно. Возможно ли, что некоторые версии Java имеют другую реализацию для toString ParameterizedTypeImpl?

Есть ли лучшее решение, чем это?

Спасибо.

1 ответ

Решение

getRawType должен сделать трюк?

Class<?> theClass = (Class<?>) yourParameterizedType.getRawType();

Приведение должно быть безопасным, так как документы говорят, что возвращаемое значение является Type объект, представляющий класс или интерфейс, который объявил этот тип, но никаких гарантий не гарантируется:)

Другие вопросы по тегам