Instanciar via reflection classe interna

2 respostas
pgioseffi

Alguém saberia como instanciar uma classe interna via reflection?

// Sem problemas aqui.
		final Class classe = Class
				.forName("br.com.empresa.ClasseExterna$ClasseInterna");
		
		/*
		 * Aqui ele me lança uma Exception in thread "main"
		 * java.lang.InstantiationException:
		 * br.com.empresa.ClasseExterna$ClasseInterna at
		 * java.lang.Class.newInstance0(Unknown Source) at
		 * java.lang.Class.newInstance(Unknown Source)
		 */
		final ClasseInterna teste01 = (ClasseInterna) classe.newInstance();

2 Respostas

A

Coloque o código da sua classe ClasseExterna e ClasseInterna.

Jà adianto que isso pode ocorrer:

  • Se a classe interna não estiver como static

  • Se ocorrer alguma das condições descritas no javadoc para essa exception (tem muita coisa pra repetir aqui, dá uma lida)

jamirdeajr
Pgioseffi, Dá uma olhada neste link: [url]http://www.jroller.com/tomdz/entry/reflection_inner_classes[/url] Fiz um teste para confirmar e aparentemente tudo certo:
public class Externa {
	public static void main(String[] args) {

		try {
			Externa extObj = new Externa();
			Constructor constructor = Externa.Interna.class.getConstructor(new Class[]{Externa.class});
			Externa.Interna intObj    = (Externa.Interna)constructor.newInstance(new Object[] {extObj});
		} catch (Exception e) {
			// ...
		}
	}
	
	public class Interna {
		// ...	
	}
}
Criado 18 de janeiro de 2012
Ultima resposta 18 de jan. de 2012
Respostas 2
Participantes 3