Java反射获取所有私有字段

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我想知道是否有办法在java中获得某些类的所有私有字段及其类型。

例如让我们假设我有一个班级

class SomeClass {
    private String aaa;
    private SomeOtherClass bbb;
    private double ccc;
}

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

提问于
用户回答回答于

有可能获得与方法的所有字段getDeclaredFields()Class。然后你必须检查每个字段的修饰符以找到私人的字段:

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()方法获取字段的类型。

用户回答回答于

可以使用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;
    }
}

扫码关注云+社区