2011-08-29 5 views
3

У меня есть Groovy класса, такие какполучить типы недвижимости во время выполнения

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

я могу перебирать эти свойства во время выполнения с помощью

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

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

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

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

+1

Это не свойства, это поля. –

+0

@ Daniel - это класс Groovy, поэтому они являются свойствами –

ответ

8

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

Field[] fields = User.class.getDeclaredFields(); 
for (Field field : fields) { 
    ParameterizedType pt = (ParameterizedType) field.getGenericType(); 
    Type concreteType = pt.getActualTypeArguments()[0]; 
} 
+0

В случае, о котором я говорил выше, следует ли безопасно отключать от типа к классу. Если нет, есть ли другое, я могу преобразовать Type в класс? –

+0

В этом случае это безопасно, да – Bozho

+0

Работает как шарм - возьмите лук. Может быть, когда-нибудь я пойму, какая информация о типовом типе стирается во время выполнения –

Смежные вопросы