Duvida loka

6 respostas
rogeriosantos77

Srs, o codigo abaixo segundo quem fez funciona, inclusive ele mostrou no eclipse sem erro.
Agora eu pergunto não consigo fazer sumir o erro : Cannot refer to the static enum field Aditivo.mapAditivosPorCodigo within an initializer

Devo confiar que esse código compila mesmo ? talves em um jre 5 ou menor ? ou ide ? sei la...
Alguem pode comentar algo

public enum MyEnum {

  private static Map<Integer, MyEnum> mapMyEnumsPorTipoDesconto;
  private static Map<Integer, MyEnum> mapMyEnumsPorCodigo;
  
  
  private MyEnum (int tipoDesconto, int codigo, String descricao) {
    this.tipoDesconto = tipoDesconto;
    this.codigo = codigo;
    this.descricao = descricao;
   
    if (MyEnum.mapMyEnumsPorTipoDesconto == null) {
      MyEnum.mapMyEnumsPorTipoDesconto = new HashMap<Integer, MyEnum>();
    }
    if (MyEnum.mapMyEnumsPorCodigo == null) {
      MyEnum.mapMyEnumsPorCodigo = new HashMap<Integer, MyEnum>();
    }
    
    MyEnum.mapMyEnumsPorTipoDesconto.put(tipoDesconto, this);
    MyEnum.mapMyEnumsPorCodigo.put(codigo, this);
   
  }
}

6 Respostas

rogeriosantos77

Srs, Se eu colocar esse código no eclipse europa ele funciona, porém se eu colocar no ganymed ele não funciona.
Detalhe eu abri o europa e o ganymed na mesma pasta da workspace.

D

Verifica o "compilance level" do seu projeto.

Botão direito no projeto --> "Properties" --> "Java Compiler" --> Do lado direito, "Enable project specific settings" marcado --> Muda o "compilance level" para um menor.

Porém, voltando ao seu erro, não entendi ele não. Trecho de código que você passou não tem nenhuma referência a "Aditivo.mapAditivosPorCodigo". O erro não é em outra classe não?!

Espero ter ajudado. Até.

rogeriosantos77

rogeriosantos77:
Srs, o codigo abaixo segundo quem fez funciona, inclusive ele mostrou no eclipse sem erro.
Agora eu pergunto não consigo fazer sumir o erro : Cannot refer to the static enum field Aditivo.mapAditivosPorCodigo within an initializer
}[/code]

Errata : alterei o nome mapAditivosPorCodigo para mapMyEnumsPorTipoDesconto

LeandroMedeiros

Boa tarde,

Seu enum estava um pouco incompleto. Acrescentei os atributos do enum e retirei os modificadores private do dos atributos Map, uma pergunta meu caro: por que o contrutor privado? Com as modificações o código ficou assim:

import java.util.HashMap;
import java.util.Map;

public enum MyEnum {
	
	  static Map<Integer, MyEnum> mapMyEnumsPorTipoDesconto;   
	  static Map<Integer, MyEnum> mapMyEnumsPorCodigo;   
	  
	  private int tipoDesconto; // acrescentar
	  private int codigo;       // acrescentar
	  private String descricao; // acrescentar
	     
	  private MyEnum (int tipoDesconto, int codigo, String descricao) 
	  {   
	    this.tipoDesconto = tipoDesconto;   
	    this.codigo = codigo;   
	    this.descricao = descricao;   
	  }   
	    
	  	if (MyEnum.mapMyEnumsPorTipoDesconto == null) 
	  	{   
	      MyEnum.mapMyEnumsPorTipoDesconto = new HashMap<Integer, MyEnum>();   
	    }   
	    if (MyEnum.mapMyEnumsPorCodigo == null) 
	    {   
	      MyEnum.mapMyEnumsPorCodigo = new HashMap<Integer, MyEnum>();   
	    }   
	       
	    MyEnum.mapMyEnumsPorTipoDesconto.put(tipoDesconto, this);   
	    MyEnum.mapMyEnumsPorCodigo.put(codigo, this);   
}
rogeriosantos77

Então Leandro, eu queria ter essa resposta para lhe dar. Na verdade esse código é parte de um programa que eu tenho que dar manutenção, so que quando abri começou a dar erro, so que o autor do código falou que não é pra dar erro, posi na maquina dele funciona, inclusive ele mostrou o codigo compilando no eclipse dele, so que ele usa o eclipse europa e não da pau e eu uso o ganymed e da pau, ai eu fiz o teste instalando o europa na minha maquina e realmente no eclipse europa esse codigo roda e no ganymed não.
eu so queria entender qual o misterio. Seria um bug do europa ?

LeandroMedeiros

Rogerio,

Diferenças entre o Eclipse Europa e GanyMede existem, só não sei se fazem diferença no caso deste código. Testei o seu código no Europa e encontrei aqueles problemas. Verifique qual versão do java está sendo utilizadas em cada eclipse que você está usando. Talvez no gannymede a versão do java está inferior à 1.5 e no Europa não. Dá uma olhada nisso, ok!

Criado 23 de janeiro de 2009
Ultima resposta 26 de jan. de 2009
Respostas 6
Participantes 3