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

时间:2010-02-01 12:11:22

标签: java reflection

我希望能够写作,例如

Method[] getMethods(Class<?> c)

将与现有的

做同样的事情
Class.getMethods()

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

3 个答案:

答案 0 :(得分: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()]);
}

解释:

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

答案 1 :(得分:3)

请改用Class.getDeclaredMethods()。请注意,与getMethods()不同,此不会返回继承的方法 - 因此,如果您想要所有内容,则需要递归类型层次结构。

答案 2 :(得分:1)

Javadoc documentation描述了所有细节。