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



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

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

可以使用反射来查找Java中是否存在一个方法。

获取您感兴趣的类的Class对象并调用getMethod(),其中包含方法名称和参数类型。

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

另外,请注意"函数"在Java中被称为方法。

最后但并非最不重要的是:记住如果你认为你需要这个,那么很可能你手头有一个设计问题。反射(也就是检查实际Java类的方法)是Java的一个相当特殊的特性,通常不应该在业务代码中使用(尽管它在一些通用库中使用得相当多,并且效果不错)。

怀疑您正在寻找Class.getDeclaredMethodsClass.getMethods,它们将为您提供类的方法。然后,您可以测试您正在寻找的对象是否存在,以及它的参数是什么等等。

您可以使用Reflections来查找该方法是否存在:

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() {
   }
  }

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

尝试使用类的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);
  }
}

这是我使用反射的解决方案…

    public static boolean methodExists(Class clazz, String methodName) {
    boolean result = false;
    for (Method method : clazz.getDeclaredMethods()) {
        if (method.getName().equals(methodName)) {
            result = true;
            break;
        }
    }
    return result;
}

您可以使用反射API来实现这一点。

YourStaticClass.getClass().getMethods();

你可以这样做

Obj.getClass().getDeclaredMethod(MethodName, parameterTypes)

相关内容

  • 没有找到相关文章

最新更新