Problema com "non-static variable this cannot be referenced from a static context"

5 respostas
J

Olá. Eu não consigo compilar meu projeto pois o netbeans fica acusando o seguinte erro:

“non-static variable this cannot be referenced from a static context”

Segue o código aonde aponta o erro

public class AutomatoFND extends Automato implements Determinizavel, Serializable {

private static final long serialVersionUID = -8819083014087538715L;
	protected Map<Estado, Map<Simbolo, Set<Transicao>>> _transicoes;

	public AutomatoFND() {
		super();
	}

.....

private void reajustarFechos(final Map<Estado, FechoEpslon> m) {
			for (Estado e : m.keySet()) {
				final FechoEpslon f = m.get(e);
				final  FechoEpslon ftemp = new FechoEpslon(); // ERRO AQUI!!!
				f.receberVisitante(new Visitante<Estado>() {

					@Override
					public void visitar(Estado e) {
						ftemp.adicionarFecho(m.get(e));
					}
					
				});
				f.adicionarFecho(ftemp);
			}
		}

....

private class FechoEpslon extends EstadoComposto {
		
		private final long serialVersionUID = -2977175480953755946L;

		private FechoEpslon(Estado e) {
			super();
			_e.add(e);
		}
		
		public FechoEpslon() {
			super();
		}

		public void adicionarFecho(FechoEpslon fechoEpslon) {
			_e.addAll(fechoEpslon._e);
		}
	}

}

O que eu posso fazer para solucionar esse problema?
Grato!

5 Respostas

romarcio
private class FechoEpslon extends EstadoComposto {}

Criou uma classe Privada? Tem certeza disso?

R

jhooon:
Olá. Eu não consigo compilar meu projeto pois o netbeans fica acusando o seguinte erro:

“non-static variable this cannot be referenced from a static context”

Segue o código aonde aponta o erro

final FechoEpslon f = m.get(e);
				final  FechoEpslon ftemp = new FechoEpslon(); // ERRO AQUI!!!

private class FechoEpslon extends EstadoComposto {
		
		private final long serialVersionUID = -2977175480953755946L;

}

O que eu posso fazer para solucionar esse problema?
Grato!

Realmente jhooon, você está tentando usar uma classe que está como private, ninguém tem acesso a essa classe.
E outra na hora de instanciar você utiliza final ?
Não entendi o porque do final.

markinlelo

não precisa deste final

final FechoEpslon ftemp = new FechoEpslon();

Rafael_Mesquita_Mour
private class FechoEpslon extends EstadoComposto

Com a classe marcada com private, você jamais conseguirá utilizar o construtor dessa classe como está tentando fazer:

final  FechoEpslon ftemp = new FechoEpslon();

Mas o erro “non-static variable this cannot be referenced from a static context” não é por isso, provavelmente em algum local do seu código, você está tentando acessar uma variável não estática através de um método estático e isso não é possível. Métodos estáticos só acessam variáveis estáticas.

WellingtonRamos
RodrigoM91:
Realmente jhooon, você está tentando usar uma classe que está como private, ninguém tem acesso a essa classe. E outra na hora de instanciar você utiliza final ? Não entendi o porque do final.
Se a classe privada for inner class, a classe que a possui tem acesso a ela.
class Test {
	private class InnerTest { //Pode ser vista por Test
		public String toString() {
			return "I am a private inner class";
		}
	}
	
	public void testMe1() {
		InnerTest test = new InnerTest(); //Veja!!!
	}
}
O erro indica que você está tentando usar algo no contexto errado. Ou seja, algo que deve estar em contexto de objeto dentro de um bloco de contexto de classe (estático): Mudando um pouco a classe acima:
class Test {
	private class InnerTest {
		public String toString() {
			return "I am a private inner class";
		}
	}
	
	public static void testeMe2() {
		InnerTest test = new Test.InnerTest(); //Erro aqui.
	}
	
	public void testMe1() {
		InnerTest test = new InnerTest();
	}
}
Neste caso a solução é colocar static na classe:
class Test {
	private static class InnerTest {
....

Veja se seu problema não é esse.

Criado 29 de maio de 2011
Ultima resposta 30 de mai. de 2011
Respostas 5
Participantes 6