chamada de método de objeto desconhecido

Jan Horcicka:

Eu tenho dois ArrayLists - ArrayList1 e ArrayList2. Cada um deles está cheio de objetos - Object1 e Object2, respectivamente. Ambos os objetos têm método 'getText'.

Object1:

public String getText() { return "1";}

Object2:

public String getText() { return "2";}

Em determinado ponto, eu gostaria de percorrer cada uma dessas listas usando o mesmo método (apenas com o parâmetro diferente).

loopThroughList(1)
loopThroughList(2)

O que é a sintaxe se eu quiser chamar um método, mas eu não sei qual objeto que vai ser? Este é o código que eu tenho até agora:

for (Object o : lists.getList(listNumber)) {
    System.out.println(o.getText());
}

Diz método não pode resolver getText . Eu pesquisei ao redor e encontrou outra solução:

for (Object o : lists.getList(listNumber)) {
    System.out.println(o.getClass().getMethod("getText"));
}

Mas isso me dá NoSuchMethodException erro. Mesmo que o método 'getText' é público.

EDIT: Para obter a lista correta, eu estou chamando o método 'getList' de um objeto diferente (listas) que retorna quer ArrayList1 ou ArrayList2 (dependendo do parâmetro fornecido).

class Lists

public getList(list) {
    if (list == 1) {
        return ArrayList1;
    }
    else if (list == 2) {
        return ArrayList2;
    }
}
user10367961:

Definir uma interface para o getTextmétodo

public interface YourInterface {

    String getText();     

}

Implementar a interface nas respectivas classes

public class Object1 implements YourInterface {

    @Override
    public String getText() { 
        return "1";
    }

}

public class Object2 implements YourInterface {

    @Override
    public String getText() { 
        return "2";
    }

}

Modificar o seu getListmétodo para retornarList<YourInterface>

public static List<YourInterface> getList(int list){
    List<YourInterface> result = new ArrayList<>();
    if(list == 1){
        // your initial type
         List<Object1> firstList = new ArrayList<>();
         result.addAll(firstList);
    } else {
        // your initial type
        List<Object2> secondList = new ArrayList<>();
        result.addAll(secondList);
    }
    return result;
}

declaração de loopThroughList

public static void loopThroughList(List<YourInterface> list){
    list.forEach(yourInterface -> System.out.println(yourInterface.getText()));
}

Exemplo de uso.

public static void main(String[] args) {
    loopThroughList(getList(1));
    loopThroughList(getList(2));
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=222430&siteId=1
Recomendado
Clasificación