如何获取在java类中声明的字段的原始类

时间:2013-07-26 05:29:54

标签: java reflection field

我们走了,假设我有班级名称:

class Name {
  String firstName, lastName;
  // getters and setters, etc.
}

and then Name class's object is declared somewhere in other class :

class Other {
  Name name;
  // getter and setters, etc.
}

现在,如果我这样做:

Other o = new Other();
Field[] fields = o.getClass().getDeclaredFields();

fields[0] --> is 'name' the Object of 'Name' class

但是当我说field[0].getClass()时:

它为我提供了java.lang.reflect.Field类对象,而不是名称类对象。

如何从'name'

等字段中获取原始类对象

5 个答案:

答案 0 :(得分:3)

Field.getType方法返回一个Class对象,该对象标识由此Field对象表示的字段的声明类型。

答案 1 :(得分:1)

基本上,您需要向字段询问特定实例的值,例如

Name name = (Name)fields[0].get(o);

现在。这样盲目投射是非常糟糕的,我可能只是先将其分配给Object然后再instanceof或者使用Field#getName来确定该字段的名称并从那里采取行动......

nb-我提到了getType,但是Evgeniy Dorofeev打败了我,我不想放弃他的回答

答案 2 :(得分:1)

fields[i].getType()

请检查 http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Field.html#getType()

getType()返回一个Type对象,该对象表示此Field对象表示的字段的声明类型。

field[0].getClass()

将返回表示字段[0]的Type对象,该对象是字段[0]。

答案 3 :(得分:1)

根据Evgeniy的回答,这条线就是你要找的:

String actualClassName = fields[0].getType().getName();

答案 4 :(得分:1)

This should help


Other o = new Other();
Class<?> classTemp1 = o.getClass();
Field[] allFields = classTemp1.getDeclaredFields();

现在,您可以在每个字段中查询名称,输入

相关问题