当前位置: 首页 > 面试题库 >

使用Java Reflection检索继承的属性名称/值

邴兴为
2023-03-14
问题内容

我有一个Java对象’ChildObj’,它是从’ParentObj’扩展而来的。现在,是否可以使用Java反射机制来检索ChildObj的所有属性名称和值,包括继承的属性?

Class.getFields为我提供了公共属性的数组,而Class.getDeclaredFields为我提供了所有字段的数组,但是它们都不包含继承的字段列表。

有没有办法检索继承的属性呢?


问题答案:

不,你需要自己编写。这是在Class.getSuperClass()上调用的简单递归方法:

public static List<Field> getAllFields(List<Field> fields, Class<?> type) {
    fields.addAll(Arrays.asList(type.getDeclaredFields()));

    if (type.getSuperclass() != null) {
        getAllFields(fields, type.getSuperclass());
    }

    return fields;
}

@Test
public void getLinkedListFields() {
    System.out.println(getAllFields(new LinkedList<Field>(), LinkedList.class));
}


 类似资料:
  • 问题内容: 我是刚开始学习Python的Java人。举个例子: 我肯定有很多冗余代码(我知道在Java中,上面的代码有很多冗余)。 对于已经从父类继承了哪些属性,哪些部分是多余的? 问题答案: 在python中为类编写函数时,应始终调用其超类的函数。我们可以使用它直接将相关属性传递给超类,因此您的代码如下所示: 正如其他人指出的那样,您可以替换该行 与 并且代码将执行相同的操作。这是因为pytho

  • 这个问题,在一个例子上解释: 用户指定读取属性“State orProvinceName”。Ldap将其处理为“st”。返回的Searchresult将包含以'st'作为键的key=>值对。如果我查找“state orprovinceName”,这显然是找不到的。我想要那个'st'键--但我不想手动编码替代LDAP字段名称的映射。相关代码部分: 说明:“Found Contact”是SearchR

  • 我有一个类,比如说,我想用Jackson从JSON中填充它,但是属性名因源而异。下面是代码当前的外观: 正如您所看到的,和在结构上是相同的,但我需要不同的子类来指定不同的属性名称。 是否有一些方法可以在不需要重新声明和重新实现每个方法的样板的情况下强制执行模型?

  • 如何使用ArrayList检索Student类的单个属性,或者检查列表中是否存在“AAA ”?

  • 在OWL中,不可伸缩属性的子属性也是不可伸缩的吗?同样,非对称属性的子属性也是非对称的吗? 从逻辑上讲,它们应该是这样的,但我在OWL文档中找不到任何说明这种情况的内容。 考虑以下示例: 基于此本体,不允许出现以下情况,因为的父项是不可伸缩的: 但是是否也隐含地不反射性呢?换句话说,这是否也被禁止: 如果你认为一个属性是一组连接成对的点的箭头,那么不可反身仅仅意味着没有在同一个点开始和结束的箭头。

  • 我有几个配置文件,比如: application.yaml 我想我需要一些定制属性spring Binder.class定制,但我找不到任何解决方案。 提前感谢!