Как получить универсальный контейнерный класс 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
объект, представляющий класс или интерфейс, который объявил этот тип, но никаких гарантий не гарантируется:)