Метод Java / Android Call из строки WITH Value

Скажем, у меня есть метод, который я хочу вызвать, который имеет аргумент строки

Чтобы позвонить, я бы сделал что-то вроде этого. MyFunction (stringValue);

СЕЙЧАС, как бы я сделал тот же самый вызов, но динамически, если бы у меня была строка со значением myFunction.

что-то вроде

method = [convert "myFunction" string to method]; method.invoke(stringValue); 

В настоящее время я пытаюсь что-то вроде

Метод java.lang.reflect.Method;

 method = Class.forName("com.blah.MyActivity").getMethod('myFunction',String.class); method.invoke (stringValue); 

Но получение ошибки IllegalArgumentException Сообщение ожидается приемник типа com.blah.MyActivity, но получил java.lang.String

    Инструкция:

     method.invoke (stringValue); 

    Требуется объект, в который будет вызван method .

    Итак, если вы попробуете что-то вроде:

     method = Class.forName("com.blah.MyActivity").getMethod('myFunction',String.class); method.invoke(someInstanceOfMyActivity, stringValue); 

    это будет работать.

    Документация: http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Method.html

    Следуйте моим комментариям выше:

    com.blah.MyActivity::myFunction это, чтобы вызвать com.blah.MyActivity::myFunction :

     com.blah.MyActivity activity = new com.blah.MyActivity() ; method = Class.forName("com.blah.MyActivity").getMethod('myFunction',String.class); method.invoke (activity, stringValue); 

    (Простить синтаксис c ++)

    Я попытаюсь объяснить, почему он работает следующим образом:

    Метод – это просто специальный тип функции. Это удобство, созданное для того, чтобы люди имели дело с классами и объектами.

    Как вы знаете, внутри метода у вас всегда есть this переменная. За этими сценами это передается как параметр, но вместо этого записывается следующее:

     com.blah.MyActivity activity = new com.blah.MyActivity() ; com.blah.MyActivity::myFunction( activity, stringValue ) 

    Вы можете легко написать это:

     com.blah.MyActivity activity = new com.blah.MyActivity() ; activity.myFunction(stringValue) 

    Когда вы получаете метод, использующий отражение, это просто «обычная функция». Чтобы вызвать его напрямую, вам необходимо передать this параметр.

    Вот почему у вас возникают ошибки типа … myFunction ожидает, что первый скрытый аргумент будет экземпляром его содержащего класса, который вы опустили.

    НТН