Generics: Получить имя экземпляра

У меня есть метод, который возвращает List > .

Свойство - это тип, имеющий один общий параметр:

public class Property> { ... }

Имея список свойств со смешанным типом, я не могу знать, какой параметр типа имеет конкретный элемент.

Я хотел бы сделать что-то вроде этого:

List> list = getList();
for(Property crt : list)
{
    PropertyWrapper crtWrapper = new PropertyWrapper(crt.getGenericType());
    //                        I know this doesn't exist ----^
}

Одним предложением: мне нужно, чтобы PropertyWrapper имел тот же общий аргумент шаблона, что и текущее свойство . Есть ли какой-нибудь способ сделать это?

Я мог бы применить предложение, как указано в https: // stackoverflow.com / a / 3437930/146003 , но даже если я сделаю это, как создать экземпляр соответствующего PropertyWrapper тогда, имея только экземпляр Class ?

При необходимости я могу изменить Свойство > . Я также не возражаю, если нужно использовать отражение (я предполагаю, что это должно быть)


РЕДАКТИРОВАТЬ: Я кое-что забыл. Фактически я не могу создать экземпляр оболочки по строке

PropertyWrapper crtWrapper = new PropertyWrapper(crt.getGenericType());

, потому что у меня есть специализированные подклассы ( PropertyWrapper_String ).

Теперь я вижу две возможности:

1: Создать экземпляр класса по строке:

String strGenericType = "";
Class wrapperClass = Class.forName("PropertyWrapper_" + strGenericType);

2: Есть ли способ специализации универсального класса без создания подкласса?


Заранее большое спасибо за ваши советы

5
задан Community 23 May 2017 в 12:29
поделиться