Как назвать методы вызова с содержимым строки

Как мне вызвать метод с содержимым строки? Я сказал 4 строки:

swimming
football
rugby
hockey

И у меня также есть 4 метода под названием:

swimming
football
rugby
hockey

У меня есть представление списка с этими строками, заполняющими представление списка (это всего лишь пример, у меня фактически есть представление списка с 200 строками) Итак, для 200 строк вместо написания оператора if:

if(string.equals("Swimming")){swimming();}

Можно ли как-нибудь сделать так, чтобы у меня был один метод onclick, который при щелчке элемента в просмотре списка запускал что-то вроде:

[string]();

Где [строка] - это некоторый код для получения строки, выбранной из списка.

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

4 ответа

Решение

Исправлено с обработкой ошибок:

try
{
    String string = "swimming";
    MyActivity.class.getMethod(string, null).invoke(this, null);
}
catch(Throwable t)
{
    t.printStackTrace(); // might want to do something else here
}

Используйте отражение.

String type = "swimming";
Method m = this.getClass().getDeclaredMethod(type, null);
m.invoke(this, null);

Вы можете сделать тэд с отражением. Для получения дополнительной информации посмотрите этот пост: Как вызвать метод Java, если имя метода указано в виде строки?

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

Другие вопросы по тегам