java - 如何使用反射检查方法是否是静态的?

标签 java reflection

我只想在运行时发现一个类的静态方法,我该怎么做? 或者,如何区分静态和非静态方法。

最佳答案

使用 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 “绕过[es] SecurityManager 根据直接调用者的类加载器进行检查”(参见 Java 安全编码指南的第 6 节)。

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

注意 Modifier 应该小心使用。以整数表示的标志不是类型安全的。一个常见的错误是在不适用的反射对象类型上测试修改器标志。可能是在同一位置设置了一个标志来表示其他一些信息。

关于java - 如何使用反射检查方法是否是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/287645/

相关文章:

java - 登录 SwingWorker

java - ClassCastException 冒险

java - 从包含它的类中获取 enum.values()

java - 当你插入充电器时,android 会调用什么服务和类?

c# - 确定所有引用的程序集

php - 获取类中声明的所有公共(public)方法,不继承

java - JAXB 解码适用于 Java 1.8,但在 Java 1.7 中返回空值

java - 如何在 Maven 中为 war 文件生成校验和

java - JNA Win32 获取JInternalFrame的标题

java - 正则表达式模式上 `java.lang.SecurityException: Prohibited package name` 的解决方法