当前位置: 首页 > 知识库问答 >
问题:

Java反射获取所有私有字段

张心水
2023-03-14
class SomeClass {
    private String aaa;
    private SomeOtherClass bbb;
    private double ccc;
}

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

共有1个答案

易修洁
2023-03-14

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

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

 类似资料:
  • 问题内容: 我想知道是否有一种方法可以获取java中某个类的所有私有字段及其类型。 例如,假设我有一堂课 现在,我想获得的所有私有字段(,,类)(如果不知道所有领域前期的名称),并检查它们的类型。 问题答案: 有可能获得与方法的所有字段的。然后,您必须检查每个字段的修饰符以查找私有字段: 请注意,这不会返回继承的字段。 最终,您可以使用Field.getType()方法获得字段的类型。

  • 如果调用,将得到一个空列表。 我尝试在Java中,在Kotlin中使用kotlin-reflect库,但没有成功。 我还尝试了https://github.com/ronmamo/reflections库进行反射,我得到了同样的结果。 你知道如何访问那个私有字段或者如何使用反射扩展一个隐藏的抽象类吗?

  • 问题内容: 我有2类:和 通过反思,我想在课堂上设置: 但我有一个例外: 线程“主”中的异常java.lang.NoSuchFieldException:a_field 但是,如果我尝试: 有用。 使用setter方法我有同样的问题: 问题答案: 要访问私有字段,您需要设置为true。您可以离开超类领域。此代码有效:

  • 问题内容: 我有一堂课,但不幸的是,我需要在运行时更改它。 使用反射我得到这个错误: 有什么办法可以改变价值? 问题答案: 假设没有阻止你执行此操作,则可以使用来绕开并重置修饰符以摆脱,并实际上修改字段。 这是一个例子: 假设没有SecurityException抛出,上面的代码将打印出来”Everything is true”。 实际执行的操作如下: 基本boolean值true和falsein

  • 上面的程序返回公共字段的值,但不在私有成员上工作。我已经在我的POJO课上宣布了getters和setters。 有什么想法吗?

  • 我上了一节课: 我用17Java的记录替换了它: 此外,我有一个代码,它通过反射进行验证,该代码与常规类一起工作,但与记录不一起工作: 在Java17中,通过反射获取记录对象字段及其值的正确方法是什么?