首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java反射获取所有私有字段

Java反射获取所有私有字段
EN

Stack Overflow用户
提问于 2013-03-10 04:09:41
回答 5查看 77.7K关注 0票数 79

我想知道有没有一种方法可以获取java中某个类的所有私有字段及其类型。

例如,假设我有一个类

代码语言:javascript
复制
class SomeClass {
    private String aaa;
    private SomeOtherClass bbb;
    private double ccc;
}

现在,我想获取SomeClass类的所有私有字段(aaabbbccc) (不知道所有字段的名称),并检查它们的类型。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-10 04:18:12

可以使用ClassgetDeclaredFields()方法获取所有字段。然后必须检查每个字段的修饰符,以找到私有字段:

代码语言:javascript
复制
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()方法获取字段的类型。

票数 130
EN

Stack Overflow用户

发布于 2013-03-10 04:19:28

您可以使用Modifier来确定字段是否为私有字段。请务必使用getDeclaredFields方法以确保从类中检索私有字段,调用getFields将仅返回公共字段。

代码语言:javascript
复制
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;
    }
}
票数 13
EN

Stack Overflow用户

发布于 2015-09-25 17:22:31

尝试使用apache commons-lang3中的FieldUtils

代码语言:javascript
复制
FieldUtils.getAllFieldsList(Class<?> cls)
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15315368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档