在Java中是否有一个方法/函数来检查是否有其他方法/函数可用,就像function_exists(functionName)在PHP中一样?
这里我指的是静态类的方法/函数.
Joa*_*uer 22
您可以使用反射了解Java中是否存在方法.
获取Class您感兴趣的类的对象,并getMethod()使用方法名称和参数类型进行调用.
如果该方法不存在,它将抛出一个NoSuchMethodException.
另请注意,"函数"在Java中称为方法.
最后但同样重要的是:请记住,如果您认为自己需要这个,那么您可能会遇到设计问题.反射(这是调用实际Java类的方法被调用)是Java的一个相当专业的特性,通常不应该在业务代码中使用(虽然它被大量使用并且在一些公共库中有一些很好的效果).
Jon*_*eet 11
我怀疑你正在寻找Class.getDeclaredMethods,Class.getMethods哪个会给你一个班级的方法.然后,您可以测试您要查找的那个是否存在,以及它的参数是什么等.
您可以使用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)
但是反射并不是很快,所以在使用它时要小心(可能会缓存它).
尝试使用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)