Java中是否有方法/函数检查是否有其他方法/函数可用,就像PHP中的function_exists(functionName)
一样?
这里我指的是静态类的方法/函数。
答案 0 :(得分:22)
您可以使用反射来查明Java中是否存在方法。
获取您感兴趣的班级的Class
对象,并使用方法名称和参数类型调用getMethod()
。
如果该方法不存在,则会抛出NoSuchMethodException
。
另外,请注意“函数”在Java中称为方法。
最后但并非最不重要:请记住如果您认为自己需要此,那么您可能会遇到设计问题。反射(这是调用实际Java类的方法被调用)是Java的一个相当专业的特性,并且不通常在业务代码中使用(虽然它被大量使用并且用于一些好的效果在一些常见的图书馆里。)
答案 1 :(得分:11)
我怀疑您正在寻找Class.getDeclaredMethods
和Class.getMethods
,它会为您提供课程的方法。然后,您可以测试您要查找的那个是否存在,以及它的参数是什么等。
答案 2 :(得分:8)
如果方法存在,您可以使用反射来查找:
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() {
}
}
但是反射并不是很快,所以在使用它时要小心(可能会缓存它)。
答案 3 :(得分:4)
尝试使用Class class =)
的Class.getMethod()
方法
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);
}
}
答案 4 :(得分:2)
这里我的解决方案使用反射...
routerLink
答案 5 :(得分:1)
您可以使用反射API来实现此目的。
YourStaticClass.getClass().getMethods();
答案 6 :(得分:1)
你可以这样做
Obj.getClass().getDeclaredMethod(MethodName, parameterTypes)