0

我试图private使用具有给定名称的反射来查找字段,该名称也可能位于父类中或继承层次结构中的其他位置。

但我发现没有这样的方法Class可以提供这些信息。

Class#getDeclaredFields()- 提供所有字段privatepublic包括继承层次结构

Class#getFields()- 包括继承层次结构,但只搜索public字段。

那么为什么没有提供两种类型信息的方法呢?

我知道这很容易实现,并且有提供此功能的库,但仍然可以包含在 java 本身中。

4

1 回答 1

0

这是因为子class级不知道private父级中的任何字段class- 它不会继承它们。

手头的问题可以通过遍历类层次结构很容易地解决getSuperClass

public static Field getField(final Class<?> toReflectOn, final String fieldName) throws NoSuchFieldException {
    try {
        return toReflectOn.getField(fieldName);
    } catch (NoSuchFieldException ex) {
        if (toReflectOn.getSuperclass() != null) {
            return getField(toReflectOn.getSuperclass(), fieldName);
        }
        throw ex;
    }
} 

This other SO post提供了一种更复杂的方法,可以遍历类层次结构中的所有字段。

于 2013-04-11T10:51:39.517 回答