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;
}
}
Definir uma interface para o getText
mé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 getList
mé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));
}