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

时间:2011-10-12 14:42:29

标签: java reflection

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

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

7 个答案:

答案 0 :(得分:22)

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

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

如果该方法不存在,则会抛出NoSuchMethodException

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

最后但并非最不重要:请记住如果您认为自己需要此,那么您可能会遇到设计问题。反射(这是调用实际Java类的方法被调用)是Java的一个相当专业的特性,并且通常在业务代码中使用(虽然它被大量使用并且用于一些好的效果在一些常见的图书馆里。)

答案 1 :(得分:11)

怀疑您正在寻找Class.getDeclaredMethodsClass.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)