2012-05-10 2 views
2

Я создал хеш-таблицу, которая будет содержать в качестве строки строку, которая будет представлять имя метода, который даст пользователь, а также как значение, вызываемое фактическим вызовом метода, также как строка. Код, я использую это один здесь:Использование для значения хэш-таблицы имени метода?

public void getMethod(String givenMethod){ 

    Map<String, String> methods = new HashMap<String, String>(); 
    methods.put("length", "length();"); 

    methods.get(givenMethod); 

} 

Из основного метода я называю objectX.getMethod («длина») ;, но длина() метод; не выполняется. Может кто-то мне помочь, пожалуйста?

+5

Что заставляет вас думать, преобразование имени метода в строку, добавляя круглые скобки, а затем доступ к этой строке, загрузив ее с карты вызовет выполнение этого метода? Чего вы хотите достичь? – Thomas

+1

Вам нужно использовать API отражения Java. –

ответ

2

Использование Java ** отражения для вызова метода по его имени
(как вы сказали, вы сохраняете имя метода на карте).
Более подробно читайте в следующей статье: http://java.sun.com/developer/technicalArticles/ALT/Reflection/

+0

Специально прочитанные ** Вызов методов по имени ** раздел – Vipul

+0

Спасибо, он работает: D – FranXh

1

Вам нужно использовать отражение, чтобы вызвать метод по имени. Таким образом, ваша структура данных будет выглядеть как

Map<String, Method> meth = new Hashmap<String,Method>(); 

Где Method является актуальной задачей.

+0

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

3

Вы получаете метод, но вы его не вызываете. Вам нужно будет сделать что-то вроде этого:

Method yourMethod = objectX.getClass().getDeclaredMethod("yourMethodName"); //This is the string that represents the name of the method. 

Затем вы вызываете метод. Все это через отражение:

yourMethod.invoke(YourObject); 

Параметр метода invoke - это сначала объект, а затем атрибуты.

Вы также можете получить тип возврата метода и отбрасывать результат, так как применение метода приведет к методу Тип объекта:

yourMethod.getReturnType(); //This line gives you the type returned by your method.