Erro tentando usar metaprogramação
21/12/2012 17:44
0
Eu tenho uma classe com várias propriedades, aí eu tento através de strings atribuir valor na propriedade correta porém dá o seguinte erro :


java.lang.IllegalArgumentException: argument type mismatch
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:2404)
groovy.lang.ExpandoMetaClass.setProperty(ExpandoMetaClass.java:1170)
groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:3335)
org.codehaus.groovy.runtime.InvokerHelper.setProperty(InvokerHelper.java:196)
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setProperty(ScriptBytecodeAdapter.java:480)


o código que estou rodando é :

monitora.pontos.each { ponto ->
ponto.itens.each { item ->
def nome = "$item.item.subClasse.descricao".concat("_").concat("$item.item.descricao").camelCase()
Double valor = cubo."$nome"[0] // Coloquei este [0] porque retorna um arrayList
valor += item.valor
cubo."$nome" = valor // Erro porque não pode atribuir o valor a um ArrayList
}
}


Não entendo porque ao chamar cubo."$nome" retorna um arrayList pois na classe do objeto cubo tem uma propriedade do tipo Double com nome que está atribuído na variável "$nome".
Tags: meta


0
Descobri aonde esta o "meu erro" rs, eu dei um findAll e ao tentar usar a propriedade (cubo."$nome")como se fosse a propriedade de um objeto ele tentava acessa a coleção de valores daquela propriedade.
22/12/2012 15:21



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto