使用反射获取所有私有字段

新手上路,请多包涵

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

例如,假设我有一个类:

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

Now I would like to get all private fields ( aaa , bbb , ccc ) of class SomeClass (Without knowing name of all fields预先)并检查它们的类型。

原文由 user2152361 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 572
2 个回答

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

原文由 Cyrille Ka 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Kevin Bowersox 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题