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

是否可以使用反射从Java中的类检索所有成员(包括private)?,java,reflection,Java,Reflection,例如,我希望能够写作 Method[] getMethods(Class<?> c) 但也包括私有和受保护的方法。你知道我该怎么做吗?改用。请注意,与getMethods()不同,它不会返回继承的方法-因此,如果您需要所有方法,则需要向上递归类型层次结构。public Method[]getMethods(类c){ public Method[] getMethods(Class<?> c) { List<Method> methods = new

例如,我希望能够写作

Method[] getMethods(Class<?> c)
但也包括私有和受保护的方法。你知道我该怎么做吗?

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

public Method[]getMethods(类c){
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()]);
}
列表方法=新的ArrayList(); while(c!=Object.class){ addAll(Arrays.asList(c.getDeclaredMethods()); c=c.getSuperclass(); } 返回methods.toArray(新方法[methods.size()]); }
解释:

  • 返回由某个类声明的所有方法,但不返回其超类
  • 返回给定类的直接超类
  • 因此,向上递归层次结构,直到
    对象
    ,您将获得所有方法
  • 如果您想包括
    对象的方法
    ,那么让条件为
    ,而(c!=null)

描述了所有细节。

好代码。为什么要在
对象
类的正下方一直向上移动呢?因为通常人们只想要自己的层次结构。在我更新的答案中,我加入了一个项目符号,指示如何包括对象方法
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()]);
}