Tenho uma dúvida boa… Preciso fazer uma comparação pra validar um dado, mas tenho o seguinte cenário:
Preciso pegar um atributo de uma classe, mas só tenho a super-classe (abstrata). Como eu faria pra poder comparar um atributo da sub-classe que eu preciso (se ela for uma instância da sub-classe)?
Obrigado!
PS: Por ser no iReport, não tenho como fazer um cast no objeto.
Desculpa, esqueci de postar isso.
Como é no iReport, e por isso só posso pegar os atributos da classe (incluindo o “class”). Não dá pra pegar o objeto todo (ou pelo menos eu não sei um forma de fazê-lo).
E não tem como fazer um cast na hora de selecionar os campos desejados (javabean datasource).
No iReport, quando eu tento fazer um typecast, ele diz: “ClasseX cannot be resolved to a type”.
E eu tenho que selecionar os campos que desejo exibir em um relatório, que são os atributos de um objeto que vêm no classpath da minha aplicação. Por isso, eu não posso selecionar um objeto inteiro, somente seus atributos (incluindo o class).
Reflection me ajudaria? Teria um exemplo de como poderia fazer?
a lista que você passa para o ireport contém apenas instancias de apenas uma sub classe ou varias?
Caso seja apenas uma, você pode referenciar a sub classe ao invés da classe abstrata no ireport
oq vc pode fazer eh testar o objeto e ver se ele eh da classe que vc quer, se for vc da o casting.
sinceramente nao sei se eh possivel programar dentro do ireport pra dar uns if e o instanceof para fazer essa verificacao, mas se tiver como faça um teste.
[quote=fbl.lucas]a lista que você passa para o ireport contém apenas instancias de apenas uma sub classe ou varias?
Caso seja apenas uma, você pode referenciar a sub classe ao invés da classe abstrata no ireport[/quote]
Eu tenho três subclasses, por isso preciso referenciar a abstrata…
[quote=mauricioadl]oq vc pode fazer eh testar o objeto e ver se ele eh da classe que vc quer, se for vc da o casting.
sinceramente nao sei se eh possivel programar dentro do ireport pra dar uns if e o instanceof para fazer essa verificacao, mas se tiver como faça um teste.[/quote]
Ele reconhece a palavra reservada instanceof, mas ele dá aquele “cannot be resolved to a type”.
Cara uma “opção” seria você colocar o método get na superclasse retornando null.
Assim quando retorna null é pq não é uma instancia da subclasse caso contrario vc teria o acesso ao atributo.
Resolveria se a situação for simples assim.
o iReport faz acesso aos atributos através de métodos get/set…
digamos que o nome do seu atributo seja “testeMetodo” e vc tenha o get como “getTestemetodo()”, o iReport retornará esta exception que vc citou “Error retrieving field value from bean”.
Veja se o nome do teu atributo confere com o nome do método e com o nome criado no field do iReport…