Обнаружение, существует ли метод / функция в Java - PullRequest
13 голосов
/ 12 октября 2011

Существует ли в Java метод / функция, которая проверяет, доступен ли другой метод / функция, например, function_exists(functionName) в PHP?

Здесь я имею в виду метод / функцию статического класса.

Ответы [ 7 ]

22 голосов
/ 12 октября 2011

Вы можете выяснить, существует ли метод в Java с использованием отражения.

Получите объект Class интересующего вас класса и вызовите getMethod() с именем метода и типами параметров.

Если метод не существует, он выдаст NoSuchMethodException.

Также обратите внимание, что «функции» называются методами в Java.

И последнее, но не менее важное: имейте в виду, что , если вы думаете, что вам нужно это , то есть вероятность, что у вас есть проблемы с дизайном под рукой. Отражение (именно так называются методы проверки реальных классов Java) является довольно специализированной особенностью Java и должно , а не , как правило, использоваться в бизнес-коде (хотя оно используется довольно интенсивно и для некоторых приятных эффектов некоторые общие библиотеки).

11 голосов
/ 12 октября 2011

I подозреваемый вы ищете Class.getDeclaredMethods и Class.getMethods, которые дадут вам методы класса.Затем вы можете проверить, существует ли тот, который вы ищете, и каковы его параметры и т. Д.

8 голосов
/ 12 октября 2011

Вы можете использовать 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 не очень быстрый, поэтому будьте осторожны, когда его используете (возможно, кешируйте его).

4 голосов
/ 12 октября 2011

Попробуйте использовать метод 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);
  }
}
2 голосов
/ 05 декабря 2016

Вот мое решение с использованием отражения ...

    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;
}
1 голос
/ 12 октября 2011

Вы можете сделать это так

Obj.getClass().getDeclaredMethod(MethodName, parameterTypes)
1 голос
/ 12 октября 2011

Для этого вы можете использовать API отражения.

YourStaticClass.getClass().getMethods();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...