Olá pessoal,
Tou num impasse aqui.
Tenho uma classe que tem varios fields e dentro de um existe um objeto de outra classe, quero chamar um metodo dessa classe e pegar o seu valor retorno. Como faço?
Olá pessoal,
Tou num impasse aqui.
Tenho uma classe que tem varios fields e dentro de um existe um objeto de outra classe, quero chamar um metodo dessa classe e pegar o seu valor retorno. Como faço?
manda algum código!!!
private Object getObjectFieldValue(Object obj, String fieldName)
throws NoSuchFieldException, IllegalAccessException
{
Class c = obj.getClass();
Field field = c.getField(fieldName);
field.setAccessible(true);
Object value = field.get(obj);
return value;
}
private Object executeMethod(final Class clazz, final Object instance,
final String methodName, final Class[] parametersTypes, final Object[] args)
throws SecurityException,
NoSuchMethodException, IllegalArgumentException, IllegalAccessException,
InvocationTargetException
{
Object resposta = null;
Method method = clazz.getMethod(methodName, parametersTypes);
resposta = method.invoke(instance, args);
return resposta;
}
private String getMethodNameByPropertyName(final String prefix, final String propertyName){
String resposta = "";
Character firstLetter = null;
String text = propertyName.substring(1);
firstLetter = Character.toUpperCase(propertyName.charAt(0));
resposta = prefix +firstLetter +text;
return resposta;
}
private Object getObjectFieldValue(Object obj, String fieldName)
throws NoSuchFieldException, IllegalAccessException
{
Class c = obj.getClass();
Field field = c.getField(fieldName);
field.setAccessible(true);
Object value = field.get(obj);
return value;
}
private Object executeMethod(final Class clazz, final Object instance,
final String methodName, final Class[] parametersTypes, final Object[] args)
throws SecurityException,
NoSuchMethodException, IllegalArgumentException, IllegalAccessException,
InvocationTargetException
{
Object resposta = null;
Method method = clazz.getMethod(methodName, parametersTypes);
resposta = method.invoke(instance, args);
return resposta;
}
private String getMethodNameByPropertyName(final String prefix, final String propertyName){
String resposta = "";
Character firstLetter = null;
String text = propertyName.substring(1);
firstLetter = Character.toUpperCase(propertyName.charAt(0));
resposta = prefix +firstLetter +text;
return resposta;
}
Olá pessoal,Tou num impasse aqui.
Tenho uma classe que tem varios fields e dentro de um existe um objeto de outra classe, quero chamar um metodo dessa classe e pegar o seu valor retorno. Como faço?
private Object getObjectFieldValue(Object obj, String fieldName)
throws NoSuchFieldException, IllegalAccessException
{
Class c = obj.getClass();
Field field = c.getField(fieldName);
field.setAccessible(true);
Object value = field.get(obj);
return value;
}
private Object executeMethod(final Class clazz, final Object instance,
final String methodName, final Class[] parametersTypes, final Object[] args)
throws SecurityException,
NoSuchMethodException, IllegalArgumentException, IllegalAccessException,
InvocationTargetException
{
Object resposta = null;
Method method = clazz.getMethod(methodName, parametersTypes);
resposta = method.invoke(instance, args);
return resposta;
}
private String getMethodNameByPropertyName(final String prefix, final String propertyName){
String resposta = "";
Character firstLetter = null;
String text = propertyName.substring(1);
firstLetter = Character.toUpperCase(propertyName.charAt(0));
resposta = prefix +firstLetter +text;
return resposta;
}
eu criei essas funcoes auxiliares .
Minha intecao e pegar via reflexao um bean que esta dentro de um field.
for (Field field : fields)
{
System.out.println("laco");
System.out.println("Nome do Field do BTP: " + field.getName());
Column column = field.getAnnotation(Column.class);
JoinColumn joinColumn = field.getAnnotation(JoinColumn.class);
String strCampo = "";
if (column != null)
{
strCampo = column.name();
}
if (joinColumn != null)
{
strCampo = joinColumn.name();
}
System.out.println("Campo: " + strCampo);
for (String strCampoAnnotation : campos)
{
if (strCampo.equals(strCampoAnnotation))
{
String nomeCampo = field.getName();
System.out.println("Pegou o nome do campo: " + nomeCampo);
field.setAccessible(true);
Field myField = getFieldByFieldAnnoted(field.getType(), strCampo);
--*
So que eu to com problema pq o tipo field nao da pra fazer cast pro tipo Btp que é a classe primaria dos meus Beans…
Pelo q entendi seria recursividade a solução para seu problema??
Esquece… nao tinha vista seu ultimo post!!
Eh q vc está recuparando o Field e não o valor do Field!
para recuperar o Valor do Field utilize isto
Field myField = getFieldByFieldAnnoted(field.getType(), strCampo);
myField.get(objeto);
Ok,
mas oque vem a ser o objeto?
Field.get(objeto);
ja tentei mas nao consegui fazer certo
fiz um metodo que agiliza isso mas nao da certo pq ele sempre usa o tipo Field como referencia:
private Object getObjectFieldValue(Object obj, String fieldName)
throws NoSuchFieldException, IllegalAccessException
{
Class c = obj.getClass();
Field field = c.getField(fieldName);
field.setAccessible(true);
Object value = field.get(obj);
return value;
}
O objeto eh a instancia da classe que o Field recuperado pertence.
Pense Assim: O Field nada mais é do que uma parte da estrutura da classe, apenas definição.
O objeto é a instância da classe.
O objeto eh a instancia da classe que o Field recuperado pertence.Pense Assim: O Field nada mais é do que uma parte da estrutura da classe, apenas definição.
O objeto é a instância da classe.
Um exemplo do quero é assim:
public ClasseA
{
ClasseB clB;
metodos
}
Quero pegar executar um metodo da ClasseB e pegar o Valor de resultado dessa classe.
ClasseA cA = new ClasseA();
1 - Recupere do field clB o seu valor
Object clB=getObjectFieldValue(cA, "clB");
Object campoQQuero=getObjectFieldValue(clB, "campoQueQuero");
ClasseA cA = new ClasseA();
1 - Recupere do field clB o seu valor
Object clB=getObjectFieldValue(cA, "clB"); Object campoQQuero=getObjectFieldValue(clB, "campoQueQuero");
O problema dessa função: Object clB=getObjectFieldValue(cA, “clB”);
É que não consigo fazer o cast o Object do Field para o Objeto que eu quero.