Intereting Posts
Воспроизведение mp3-файла во время загрузки? Google firebase проверяет, существует ли ребенок Работа с ошибками API-покупки-логики для расходных материалов в API биллинга Google Play v3 (для всех, кто использует расходные материалы с API v3) Как получить имена приложений, видимых на главном экране в Android? Эспрессо: прокрутка Recyclerview до конца Как записать аудиофайл с лучшим качеством в Android? Как определить, является ли какая-либо из моих операций самой фронтальной и видимой для пользователя? Если ScrollView поддерживает только один прямой дочерний элемент, как я могу сделать весь макет прокручиваемым? Когда наконец-то привязан к действию фрагмент? Студия Android – Не удалось найти целевой Android-18 Обработка видео на Android 3.x / Google TV / SDK: видеокадра для SurfaceTexture / OpenGL / GLSL Как мы определяем несколько модулей с помощью нового построителя основанного на градиенте NDK? Анализ проекта Android с Lint и SonarQube Методика анализа XML в Android Обрезать изображение без OutOfMemory – Android

Android / Java: вызов метода с использованием отражения?

У меня есть статический метод под названием selectDialog (String s, int i), в котором я хочу вызвать другой метод в пределах одного класса (Dialogs.class) на основе параметров, предоставленных для выбораDialog. S – это имя желаемого метода, а i – это единственный параметр.

Я пробовал множество учебных пособий и провел несколько часов на этом тему, но я не могу понять, что именно мне нужно делать.

Есть идеи?

Благодаря!

    Почему вы хотите вызвать метод с именем, переданным в параметре String? Не можете ли вы создать константы для разных действий, затем использовать switch и в каждом случае вызвать метод с параметром i ?

    У вас будет преимущество компилятора, проверяющего ваш код на наличие ошибок.

    Edit : если вы действительно хотите использовать отражение, извлеките объект Method с помощью:

     Method m = YourClass.class.getMethod("method_name",new Class[] { Integer.class }) 

    Я думаю, Integer.class может работать. Затем вызовите метод как

     m.invoke(null,123); //first argument is the object to invoke on, ignored if static method 
     Method method = Dialogs.getMethod(s, Integer.class); method.invoke(null, i); 

    Если вы просто хотите вызвать другой статический метод в классе, вы можете использовать подход, уже идентифицированный другими:

     Method method = Dialogs.getMethod(s, Integer.class); method.invoke(null, i); 

    Но если вы хотите использовать статический метод для вызова нестатического метода, вам нужно будет передать объект, который вы хотите ссылаться, или сделать selectDialog нестатическим.

     function chooseDialog(Object o, String s, Integer i) { Method method = Dialogs.getMethod(o, Integer.class); method.invoke(o, i); } 

    Но я не думаю, что это правильный способ ООП справиться с этой проблемой. И исходя из ваших комментариев, рефлексия не является абсолютно необходимой, и выберетеDialog проанализировать строку и передать, что соответствующий метод является гораздо более типичным подходом. В любом из подходов ваши модульные тесты должны выглядеть одинаково.

      if (s.equals("dialog1")) { dialog1(i); }