Field em Classe Java

13 respostas
A

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?

13 Respostas

thiagoalgeri

manda algum código!!!

A
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;
}
A
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;
}
A

aldivone:
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;
}
A

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…

thiagoalgeri

Pelo q entendi seria recursividade a solução para seu problema??

thiagoalgeri

Esquece… nao tinha vista seu ultimo post!!

thiagoalgeri

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);
A

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;
}
thiagoalgeri

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.

A

thiagoalgeri:
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.

thiagoalgeri
ClasseA cA = new ClasseA();

1 - Recupere do field clB o seu valor

Object clB=getObjectFieldValue(cA, "clB");
Object campoQQuero=getObjectFieldValue(clB, "campoQueQuero");
A

thiagoalgeri:
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.

Criado 4 de julho de 2006
Ultima resposta 4 de jul. de 2006
Respostas 13
Participantes 2