使用AccessibleObject.isAccessible()是无法判断类中方法是否为非公有的,可以参考Java的文档[1],可以
发现isAccessible()只是用来返回accessible标记的当前值。这篇文档[2]很好地阐述了accessible的用法。
如果要找出类中的非公有方法,可以用下面这段代码:
for (Method method : clazz.getDeclaredMethods()) {
if (method != null) {
try {
clazz.getMethod(method.getName(), method.getParameterTypes());
} catch (NoSuchMethodException e) {
logger.warn("non-public method: " + method.getDeclaringClass().getName() + "." + method.getName() + "()");
}
}
}
getDeclaredMethods()返回类的public,protected及private方法,而getMethod()只返回公有方法。
因此如果在getDeclaredMethods中找到,而在getMethod中获取不到的方法,可判断为非公有方法。
请高手给出更高效的方法。
[1] http://docs.oracle.com/javase/1.3/docs/api/java/lang/reflect/AccessibleObject.html
[2] http://bbs.itheima.com/
thread-2668-1-1.html