这里,假设我有类名:
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类对象。
如何从'name'
Field.getType
方法返回一个class对象,该对象标识由该field对象表示的字段的声明类型。
This should help
Other o = new Other();
Class<?> classTemp1 = o.getClass();
Field[] allFields = classTemp1.getDeclaredFields();
现在,您可以在每个字段中查询名称、类型等
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]。
基本上,您需要向字段询问特定实例的值,比如
Name name = (Name)fields[0].get(o);
现在。像这样进行盲转换是非常危险的,我可能只是先将其分配给Object
,然后再执行instanceof
,或者可能使用Field#getName
来确定字段的名称并从中采取行动。。。
nb-我会提到getType
,但叶夫根尼·多罗费耶夫击败了我,我不想从他的回答中拿走
根据Evgeniy的回答,这一行就是您想要的:
String actualClassName = fields[0].getType().getName();