Como executar um método DA INSTÂNCIA de uma classe via Reflection

1 resposta
rodrlgo

Pessoal, eu tenho as seguintes classes

Uma classe abstrata
import java.lang.reflect.Field;

public abstract class ClasseAbstrata {

	public abstract void metodo1();

	public void metodo2() {
		try {
			Class cls = Class.forName(this.getClass().getName());
			Field fieldlist[] = cls.getDeclaredFields();

			for (int i = 0; i < fieldlist.length; i++) {

				Field fld = fieldlist[i];

				if (fld.getType() == this.getClass()) {
					//TODO como chamar o método "metodo1" da instância concreta2 que é do tipo ClasseAbstrata
				}

			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
Uma classe concreta que herda da abstrata
public class ClasseConcreta1 extends ClasseAbstrata{

	private List<ClasseConcreta2> concreta2 = new ArrayList<>();
	private String valor1;
	
	@Override
	public void metodo1() {
		metodo2();		
	}

	public List<ClasseConcreta2> getConcreta2() {
		return concreta2;
	}

	public void setConcreta2(List<ClasseConcreta2> concreta2) {
		this.concreta2 = concreta2;
	}

	public String getValor1() {
		return valor1;
	}

	public void setValor1(String valor1) {
		this.valor1 = valor1;
	}
	
	

}
Outra classe concreta que herda da abastraca
public class ClasseConcreta2 extends ClasseAbstrata {

	@Override
	public void metodo1() {
		metodo2();
	}

}

Eu gostaria de quando executar o método "metodo1" da classe Concreta1 que chama o método "metodo2" da classe pai, nesse método 2 eu gostaria de varrer todos os atributos que são do tipo "ClasseAbstrata" e achando e o mesmo estando instanciado executar o método "metodo1" da instância, no caso acima seria para executar o método "metodo1" da instância concreta2 da classe "Concreta1".

O pessoal nível advanced dá um HELP! srsrsrrs

1 Resposta

leo_mf

Faz assim:

import java.lang.reflect.Field;  
  
public abstract class ClasseAbstrata {  
  
    public abstract void metodo1();  
  
    public void metodo2() {  
        try {  
            Class cls = ClasseAbstrata.class;  
            Method method = cls.getDeclaredMethod("metodo1");  
  
            method.invoke(this);
        } catch (ClassNotFoundException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
  
}
Criado 13 de março de 2013
Ultima resposta 13 de mar. de 2013
Respostas 1
Participantes 2