Estou construindo um método que recebe uma lista de elementos de dois objetos distintos. O problema é que quando pego um elemento da lista e aplico instanceof o resultado é false, apesar da classe usar generics.
Preciso fazer alguma modificação na classe Elemento ou tenho que pegar cada objeto da lista separadamente para aplicar o cast? O que fazer?
Use polimorfismo para isso
Deixe seu método escreveDados abstrato, em uma classe abstrata, aí em cada classe que vc iria fazer o “if instanceof”, vc extends dessa classe sua abstrata, ficando cada classe filha, responsável por implementar ela
Onimatsu
Entendi sua dica só que o método escreveDados fica numa classe a parte, não posso reimplementar esse método na classe do 1 Elemento e do 2 Elemento, não ficaria bem estruturado no meu projeto.
Logo, tenho mesmo que fazer com que escreveDados aceite uma lista de objetos diferentes.
igor_ks
Sim, entendo que o escreveDados fica em outra classe, e que há outras classes tipo essa “Elemento”
publicclassClass1extendsAbstractClass{privateStringtext1;privateStringtext2;@OverridepublicvoidsaveOnDatabase(Stringvalue){//Codigo para salvar na base}@OverrideprotectedFilegetFile(){//codigo para ler o arquivo referente a Class1returnnull;}//getters and setters}
publicclassClass2extendsAbstractClass{privateStringfield1;privateStringfield2;@OverridepublicvoidsaveOnDatabase(Stringvalue){//Codigo para salvar na base}@OverrideprotectedFilegetFile(){//codigo para ler o arquivo referente a Class1returnnull;}//getters and setters
Onde quero representar o Class1 como fosse sua classe Elemento, e o método saveOnDatabase, por exemplo, como se fosse seu método escreveDados
igor_ks
Fiz isso rapidamente para tentar demonstrar minha idéia. Se quiser entender melhor, coloca uns System.out.println nos métodos para entender o comportamento
Onimatsu
Sua lógica é perfeitamente aplicável, porém cada caso é um caso.
Consegui resolver o problema removendo o generics da classe e da lista, retirei o objeto da lista de objetos para realizar o cast e substitui a lista antiga por outra capaz de aceitar qualquer tipo de objeto <?>