是否可以使用反射从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()]);
}