例如,我希望能够写作
Method[] getMethods(Class<?> c)
Run Code Online (Sandbox Code Playgroud)
这将与现有的做同样的事情
Class.getMethods()
Run Code Online (Sandbox Code Playgroud)
但也包括私人和受保护的方法.我有什么想法可以做到这一点?
Boz*_*zho 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()]);
}
Run Code Online (Sandbox Code Playgroud)
解释:
getDeclaredMethods返回由某个类声明的所有方法,但不返回其超类c.getSuperclass() 返回给定类的直接超类Object你获得所有方法Object,那么让条件成为while (c != null)