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?
F
fasts
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?
mauricioadl
pra te dizer a verdade nao entendi nao.
como eh o seu ambiente, parametros, select, etc.
F
fasts
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?
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
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.
F
fasts
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
Eu tenho três subclasses, por isso preciso referenciar a abstrata…
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.
Ele reconhece a palavra reservada instanceof, mas ele dá aquele “cannot be resolved to a type”.
mauricioadl
sera q esse erro nao esta acontecendo prq a subclasse que vc esta tentando converter nao eh a mesma que esta vindo?
F
fasts
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.
fbl.lucas
Tenta adicionar o Field manualmente la no ireport com o nome do atributo desta subclasse que você quer acessar e vê se da erro.
erico_kl
você adicionou a sua classe no classpath do ireport?
F
fasts
Sim, dá uma excessão no aplicativo.
“Error retrieving field value from bean”
Sim.
fbl.lucas
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.
erico_kl
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…