我怎样才能检查一个方法是否使用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); } 

注意:从安全的angular度来看,这种方法实际上是危险的。 Class.getMethods“bypass [es] SecurityManager根据直接调用者的类加载器检查”(请参阅​​Java安全编码指南的第6部分)。

免责声明:未经testing甚至编译器。

注意Modifier应该小心使用。 用int表示的标志是不安全的。 一个常见的错误是在一个不适用的reflection对象types上testing一个修饰符标志。 可能是在相同位置的一个标志被设置为表示一些其他信息。

你可以得到这样的静态方法:

 for (Method m : MyClass.class.getMethods()) { if (Modifier.isStatic(m.getModifiers())) System.out.println("Static Method: " + m.getName()); } 

为了充实以前的(正确的)答案,下面是一个完整的代码片段,它可以做你想做的事(被忽略的例外):

 public Method[] getStatics(Class<?> c) { Method[] all = c.getDeclaredMethods() List<Method> back = new ArrayList<Method>(); for (Method m : all) { if (Modifier.isStatic(m.getModifiers())) { back.add(m); } } return back.toArray(new Method[back.size()]); }