2014-03-28 2 views
11

У меня есть метод, который требует что-то вроде Double.class как один из его входов;Отражение в Java: получить класс поля

например.

someOutput = SomeObj.someMethod("parameter",Double.class); 

У меня есть еще один класс, который имеет кучу полей различных типов данных, которые я хотел бы, чтобы накормить в качестве входных данных для этого метода вместо явного написания Double.class из Integer.class и т.д. и т.п.

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

for(Field field : Class.forName(MyClassWithLotsOfFields.class.getCanonicalName()).getFields()){ 
    someOutput = SomeObj.someMethod("parameter",field.getClass()); 
    //Do more stuff here... 
} 

но field.getClass() не дает мне фактический класс поля от MyClassWithLotsOfFields но вместо java.lang.reflect.Field

какие-либо идеи о том, как сделать то, что я хотеть?

+3

Что вы пытаетесь достичь, выполнив 'Class.forName (MyClassWithLotsOfFields.class.getCanonicalName())' вместо просто 'MyClassWithLotsOfFields.class'? –

+1

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

ответ

22

Необходимо Field#getType().

Возвращает Class объект, который идентифицирует объявленный тип для поля , представленного этим Field объекта.

getClass() - метод, унаследованный от Object, который возвращает тип самого объекта.

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