Dúvida ao derivar a classe Exception

3 respostas
E
Caros amigos, com o intuito de agrupar as exceções geradas pelo aplicativo criei a seguinte classe:
package lib.client.exc;

public class CException
{
	public static class AppletIsNull extends Exception 
	{															
		public AppletIsNull()
		{
			super("Applet não foi instanciado");
		}
	}

        public static class ResourceNotFound extends Exception 
	{															
		public ResourceNotFound()
		{
			super("Recurso indisponível");
		}
	}
	
}
Fonte que lança a exceção:
package lib.client;

import lib.client.exc.CException;
import lib.client.exc.CException.AppletIsNull;

public class CClientCfg 
{
	private CApplet m_applet;
	
	public void setApplet(CApplet applet)
	{
		m_applet = applet;
	}
	
	
	public CApplet getApplet() throws AppletIsNull 
	{
		if (m_applet == null) {
			throw new CException.AppletIsNull();
		}
		
		return m_applet;
	}
	
}

Se eu não declarar a classe interna AppletIsNull como static o compilador no ponto do lançamento da exceção dá a seguinte mensagem:
"No enclosing instance of type CException is accessible. Must qualify the allocation with an enclosing instance of type CException"

Alguém saberia me dizer porquê a classe interna tem que ser static?

3 Respostas

evertonsilvagomesjav

Não é que ela tem que ser statica, é porque se ela nao for statica vc precisa de uma instancia da classe Top Level para acessar a inner class.

evertonsilvagomesjav

So mais uma coisa, se nao fosse statica ficaria:

if (m_applet == null) { throw new CException().new AppletIsNull("sua msg"); }

:smiley:

E

Valeu!

Criado 27 de setembro de 2010
Ultima resposta 27 de set. de 2010
Respostas 3
Participantes 2