例如,我希望能够写作
Method[] getMethods(Class<?> c)
这会和现有的做同样的事情
Class.getMethods()
但也包括私有(private)和 protected 方法。我有什么想法可以做到这一点吗?
最佳答案
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
返回由特定类声明的所有方法,但不返回其父类(super class) -
c.getSuperclass()
返回给定类的直接父类(super class) - 因此,递归层次结构,直到
Object
,您获得所有方法 - 如果你想包含
Object
的方法,那么让条件为while (c != null)
关于java - 是否可以使用反射从 Java 类中检索所有成员,包括私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176478/