получить типы свойств во время выполнения - PullRequest
3 голосов
/ 29 августа 2011

У меня есть класс Groovy, например

class User {
    List<Foo> someFoos = new ArrayList<Foo>()
    List<Bar> someBars = new ArrayList<Bar>()    
}

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

def user = new User()
List<MetaProperty> setProperties = user.metaClass.properties.findAll {MetaProperty property ->
    property.name.startsWith('some')
}

Если я проверяю тип каждого из этих свойств Setвозвращается

setProperties.each {MetaProperty setProperty -> 
    assert setProperty.type == Set    
}

Есть ли способ во время выполнения, чтобы я мог получить параметр универсального типа (Foo и Bar) для каждого из этих свойств?

Я сильно подозреваю, что не могуиз-за стирания типа, но если бы кто-то мог подтвердить мои подозрения, я был бы признателен.

1 Ответ

8 голосов
/ 29 августа 2011

Да, вы можете.Это определения полей, и они сохраняют свои определения типов во время выполнения.Я дам вам Java-код, вы также можете использовать его в Groovy (я не знаю, специфичное для Groovy решение)

Field[] fields = User.class.getDeclaredFields();
for (Field field : fields) {
    ParameterizedType pt = (ParameterizedType) field.getGenericType();
    Type concreteType = pt.getActualTypeArguments()[0];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...