是否有一个方法/函数在Java中检查是否有另一个方法/函数可用,就像PHP中的function_exists(functionName)
一样?
这里我指的是静态类的方法/函数
您可以使用反射来查找Java中是否存在一个方法。
获取您感兴趣的类的Class
对象并调用getMethod()
,其中包含方法名称和参数类型。
如果该方法不存在,它将抛出一个NoSuchMethodException
。
另外,请注意"函数"在Java中被称为方法。
最后但并非最不重要的是:记住如果你认为你需要这个,那么很可能你手头有一个设计问题。反射(也就是检查实际Java类的方法)是Java的一个相当特殊的特性,通常不应该在业务代码中使用(尽管它在一些通用库中使用得相当多,并且效果不错)。
我怀疑您正在寻找Class.getDeclaredMethods
和Class.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)