Как я могу добавить метод в динамическую строку и вызывать эти методы в соответствии с условием цикла for - PullRequest
0 голосов
/ 04 января 2019

Я хочу вызвать несколько методов в строке в соответствии с условием цикла for.приведенный ниже код поможет вам понять, что я ищу.

public void onItemClick(View view, int position) {
for (count=0;count<=25;count++){

            if (count==position){

                String methodCall="A"+count+"List()";
                A0List()=methodCall;
            }
        }
}

A0List(){
     //Body 
     //when count=0 this method is called
}

A1List(){
    //body
    //when count=1 this method is called
}
------
------
A25List(){
   //body
  //when count=25 this method is called
}

На самом деле, я использую этот код в своем приложении Andriod, чтобы уменьшить число прослушивателей.Прошу прощения за любые ошибки и спасибо за продвинутый

Примечание: я не хочу использовать лестничную петлю if-else-if

1 Ответ

0 голосов
/ 04 января 2019

То, о чем спрашивает ОП, описано здесь: Как вызвать метод Java, если имя метода дано в виде строки?

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

Map<Integer, Runnable> functionMap = new HashMap<>();
functionMap.put(0, () -> A0List());
functionMap.put(1, () -> {/*A1List body*/});
// etc
functionMap.put(25, () -> someMeaningfulMethodName());

Тогда ваша функция будет:

public void onItemClick(View view, int position) {
    functionMap.getOrDefault(position, () -> {/* handle incorrect position */}).run();
}

Еще проще будет оператор switch:

switch(position)
{
    case 0: A0List(); break;
    case 1: A1List(); break;
    // etc
    case 25: A25List(); break;
    default: /* handle unknown position */ break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...