2

我们开始吧,假设我有类名:

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类对象。

如何从“名称”之类的字段中获取原始类对象

4

5 回答 5

3

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

于 2013-07-26T05:37:02.560 回答
2
This should help


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

现在您可以查询每个字段的名称、类型

于 2013-07-26T05:38:47.633 回答
1

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

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

现在。像这样进行盲投是非常危险的,我可能只是简单地将它分配给Object第一个然后做instanceof或者可能用于Field#getName确定字段的名称并从那里采取行动......

nb-我会提一下getType,但 Evgeniy Dorofeev 打败了我,我不想从他的回答中拿走

于 2013-07-26T05:36:29.903 回答
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] 的类型对象,这显然是字段 [0]。

于 2013-07-26T05:37:54.867 回答
1

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

String actualClassName = fields[0].getType().getName();
于 2013-07-26T05:38:22.913 回答