Comparar atributo sem saber a classe

Boa tarde, pessoal.

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.

vc nao pode dar um casting no objeto e comparar normalmente?

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).

Entendeu?

pra te dizer a verdade nao entendi nao.
como eh o seu ambiente, parametros, select, etc.

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”.

sera q esse erro nao esta acontecendo prq a subclasse que vc esta tentando converter nao eh a mesma que esta vindo?

Não. É como se eu não estivesse dando um “import” nessas classes.

Tentei fazer um “$F{class}.isInstance(new ClasseX)”, mas também não deu.

Tenta adicionar o Field manualmente la no ireport com o nome do atributo desta subclasse que você quer acessar e vê se da erro.

você adicionou a sua classe no classpath do ireport?

Sim, dá uma excessão no aplicativo.
“Error retrieving field value from bean”

Sim. :confused:

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…