检测Java中是否存在方法/函数

Mo3*_*o3z 13 java reflection

在Java中是否有一个方法/函数来检查是否有其他方法/函数可用,就像function_exists(functionName)在PHP中一样?

这里我指的是静态类的方法/函数.

Joa*_*uer 22

可以使用反射了解Java中是否存在方法.

获取Class您感兴趣的类的对象,并getMethod()使用方法名称和参数类型进行调用.

如果该方法不存在,它将抛出一个NoSuchMethodException.

另请注意,"函数"在Java中称为方法.

最后但同样重要的是:请记住,如果您认为自己需要这个,那么您可能会遇到设计问题.反射(这是调用实际Java类的方法被调用)是Java的一个相当专业的特性,通常应该在业务代码中使用(虽然它被大量使用并且在一些公共库中有一些很好的效果).

  • 最后一段+1.不要尝试用Java编写PHP. (2认同)

Jon*_*eet 11

怀疑你正在寻找Class.getDeclaredMethods,Class.getMethods哪个会给你一个班级的方法.然后,您可以测试您要查找的那个是否存在,以及它的参数是什么等.


rit*_*rit 8

您可以使用Reflection查找方法是否存在:

public class Test {
    public static void main(String[] args) throws NoSuchMethodException {
        Class clazz = Test.class;

        for (Method method : clazz.getDeclaredMethods()) {
                if (method.getName().equals("fooBar")) {
                System.out.println("Method fooBar exists.");
            }
        }

        if (clazz.getDeclaredMethod("fooBar", null) != null) {
            System.out.println("Method fooBar exists.");
        }
   }

   private static void fooBar() {
   }
  }
Run Code Online (Sandbox Code Playgroud)

但是反射并不是很快,所以在使用它时要小心(可能会缓存它).


mae*_*ics 5

尝试使用Class.getMethod()Class类的方法=)

public class Foo {
  public static String foo(Integer x) {
    // ...
  }
  public static void main(String args[]) throws Exception {
    Method fooMethod = Foo.class.getMethod("foo", Integer.class);
    System.out.println(fooMethod);
  }
}
Run Code Online (Sandbox Code Playgroud)