我希望能够写作,例如
Method[] getMethods(Class<?> c)
将与现有的
做同样的事情Class.getMethods()
但也包括私有和受保护的方法。我有什么想法可以做到这一点吗?
答案 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描述了所有细节。