java – 如何检查一个方法是否使用反射静态?

我想在运行时发现只有静态方法的类,我怎么能这样做?
或者,如何区分静态和非静态方法。
使用Modifier.isStatic(method.getModifiers())。

/**
 * Returns the public static methods of a class or interface,
 *   including those declared in super classes and interfaces.
 */
public static List<Method> getStaticMethods(Class<?> clazz) {
    List<Method> methods = new ArrayList<Method>();
    for (Method method : clazz.getMethods()) {
        if (Modifier.isStatic(method.getModifiers())) {
            methods.add(method);
        }
    }
    return Collections.unmodifiableList(methods);
}

注意:从安全的角度来看,这种方法实际上是危险的。 Class.getMethods“bypass [es] SecurityManager根据直接调用者的类加载器进行检查”(参见Java安全编码准则的第6节)。

免责声明:未测试,甚至编译器。

注意修改器应谨慎使用。表示为ints的标志不是类型安全。一个常见的错误是在不适用的反射对象类型上测试修饰符标志。可能的情况是,设置相同位置中的标志以表示一些其他信息。

http://stackoverflow.com/questions/287645/how-can-i-check-if-a-method-is-static-using-reflection

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 如何检查一个方法是否使用反射静态?