我想知道有没有一种方法可以获取java中某个类的所有私有字段及其类型。
例如,假设我有一个类
class SomeClass {
private String aaa;
private SomeOtherClass bbb;
private double ccc;
}
现在,我想获取SomeClass
类的所有私有字段(aaa
、bbb
、ccc
) (不知道所有字段的名称),并检查它们的类型。
发布于 2013-03-10 04:18:12
可以使用Class
的getDeclaredFields()
方法获取所有字段。然后必须检查每个字段的修饰符,以找到私有字段:
List<Field> privateFields = new ArrayList<>();
Field[] allFields = SomeClass.class.getDeclaredFields();
for (Field field : allFields) {
if (Modifier.isPrivate(field.getModifiers())) {
privateFields.add(field);
}
}
请注意,getDeclaredFields()
不会返回继承的字段。
最后,您将使用Field.getType()方法获取字段的类型。
发布于 2013-03-10 04:19:28
您可以使用Modifier
来确定字段是否为私有字段。请务必使用getDeclaredFields
方法以确保从类中检索私有字段,调用getFields
将仅返回公共字段。
public class SomeClass {
private String aaa;
private Date date;
private double ccc;
public int notPrivate;
public static void main(String[] args) {
List<Field> fields = getPrivateFields(SomeClass.class);
for(Field field: fields){
System.out.println(field.getName());
}
}
public static List<Field> getPrivateFields(Class<?> theClass){
List<Field> privateFields = new ArrayList<Field>();
Field[] fields = theClass.getDeclaredFields();
for(Field field:fields){
if(Modifier.isPrivate(field.getModifiers())){
privateFields.add(field);
}
}
return privateFields;
}
}
发布于 2015-09-25 17:22:31
尝试使用apache commons-lang3中的FieldUtils
:
FieldUtils.getAllFieldsList(Class<?> cls)
https://stackoverflow.com/questions/15315368
复制相似问题