Estou tentando receber o valor do campo via reflexão. O problema é que não conheço o tipo de campos e preciso decidir isso enquanto obtém o valor.
Este código resulta com esta exceção:
Não é possível definir o campo java.lang.String com .... fieldName como java.lang.String
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Class<?> targetType = field.getType();
Object objectValue = targetType.newInstance();
Object value = field.get(objectValue);
Tentei transmitir, mas recebo erros de compilação:
field.get((targetType)objectValue)
ou
targetType objectValue = targetType.newInstance();
Como posso fazer isso?
java
reflection
Ido Barash
fonte
fonte
field.get()
deve serobject
, nãoobjectValue
.Respostas:
Como respondido antes, você deve usar:
Outra maneira, que às vezes é preferida, é chamar o getter dinamicamente. código de exemplo:
Lembre-se também de que quando sua classe é herdada de outra classe, você precisa determinar recursivamente o campo. por exemplo, para buscar todos os campos de uma determinada classe;
fonte
BaseValidationObject
?object
classe não tem o métodogetMethods()
. Algum conselho?Você deve passar o objeto para obter o método do campo , para
fonte
object.getClass()
Vontade retornos você Este objeto de classe)object
no snippet não está definido para que os leitores não entendam como usá-lo.object
significa nosso objeto / instância de destino com o qual trabalhamos. Eu acho que os leitores estão realmente totalmente bem com o que é umaobject
resposta nesta resposta.Uso as reflexões na implementação toString () da minha classe de preferência para ver os membros e os valores da classe (depuração simples e rápida).
O código simplificado que estou usando:
Espero que ajude alguém, porque também procurei.
fonte
Embora não esteja realmente claro para mim o que você está tentando alcançar, vi um erro óbvio no seu código:
Field.get()
espera o objeto que contém o campo como argumento, e não algum valor (possível) desse campo. Então você deveria terfield.get(object)
.Como você parece estar procurando o valor do campo, é possível obtê-lo como:
Não há necessidade de instanciar o tipo de campo e criar algum valor vazio / padrão; ou talvez haja algo que eu perdi.
fonte
object
não está definido, os leitores não conseguem entender como aplicar a resposta.fonte
Você está chamando get com o argumento errado.
Deveria ser:
fonte
object
não está definido, os leitores não conseguem entender como aplicar o exemplo na respostaPostei minha solução no Kotlin, mas ela também pode funcionar com objetos java. Eu crio uma extensão de função para que qualquer objeto possa usar essa função.
Dê uma olhada nesta página da Web: https://www.geeksforgeeks.org/field-get-method-in-java-with-examples/
fonte
fonte