是否可以使用反射从Java中的类中检索所有成员,包括private?

Nel*_*ess 7 java reflection

例如,我希望能够写作

Method[] getMethods(Class<?> c)
Run Code Online (Sandbox Code Playgroud)

这将与现有的做同样的事情

Class.getMethods()
Run Code Online (Sandbox Code Playgroud)

但也包括私人和受保护的方法.我有什么想法可以做到这一点?

Boz*_*zho 11

public Method[] getMethods(Class<?> c) {
    List<Method> methods = new ArrayList<Method>();
    while (c != Object.class) {
        methods.addAll(Arrays.asList(c.getDeclaredMethods()));
        c = c.getSuperclass();
    }

    return methods.toArray(new Method[methods.size()]);
}
Run Code Online (Sandbox Code Playgroud)

解释:

  • getDeclaredMethods返回由某个类声明的所有方法,但不返回其超类
  • c.getSuperclass() 返回给定类的直接超类
  • 因此,递归层次结构,直到Object你获得所有方法
  • 如果你想要包含方法Object,那么让条件成为while (c != null)

  • 因为通常只需要_his_层次结构.在我更新的答案中,我添加了一个子弹,指示如何包含Object方法 (2认同)