Como eu faço para alterar qual das constantes o enum vale?

Olá. Eu estou aprendendo sobre enum. É hilário como eu programo em Java há tempo e só agora fui conhece-los por acidente. Mas o que está me intrigando é o seguinte. Eu tenho este enum:

public static final String ONCE = "Uma vez";
public static String PARTING_ACTION = "A partir de uma ordem";
public static String ON_MODIFICATION = "Quando houver alguma modificação";
public static String DAILY = "Diáriamente";
public static String WEEKLY = "Semanalmente";
public static String MONTHLY = "Mensalmente";
public enum TRANSFER_IN{ONCE, PARTING_ACTION,ON_MODIFICATION, DAILY,WEEKLY,MONTHLY};

Alguém sabe me dizer como eu faço para “dizer” qual das constantes o enum vale? Eu notei que não existe algo como um setValue.

Exemplo:

public class Rotinas {
    public static final int INCLUIR = 1;
    public static final int ALTERAR = 2;
    public static final int PADRAO = -1;  
}

Ele recebe o valor da seguinte maneira:

private int estadotela;
estadotela = Rotinas.PADRAO; //Assumiu o valor -1
estadotela = Rotinas.ALTERAR ; //Assumiu o valor 2
estadotela = Rotinas.INCLUIR ; //Assumiu o valor 1

Obrigado por responder. E aonde que entre o enum?

Neste enum não existe qualquer relação entre a String ONCE e o valor da enum TRANSFER_IN.ONCE.

O que tu pretendes, deve ser algo assim:

 public enum TRANSFER_IN {
      ONCE ("Uma vez"),
      PARTING_ACTION("A partir de uma ordem"),
      ON_MODIFICATION("Quando houver alguma modificação");


    String value;
    private TRANSFER_IN(String value){
        this.value = value);
    } 

    public String getValue(){
          return this.value;
    }
}
1 curtida

Toda vez que eu quiser alterar seu valor vou ter que chamar o construtor? Criar uma nova enum? É sempre necessário fazer essa declaração semelhante a uma classe? Não dá para declarar simplesmente como um array? Algo como isso: enum nome{opcao1,opcao2,opcao3} ?

Enum em Java é um tipo especial de classe.

Usar construtores como o @pmlm mostrou é bem mais elegante.

Mas se a questão é mudar o valor da String durante a execução do seu programa, vc poderia implementar seu próprio setValue();

public enum TRANSFER_IN {
    ONCE ("Uma vez"),
    PARTING_ACTION("A partir de uma ordem"),
    ON_MODIFICATION("Quando houver alguma modificação");

    String value;
    private TRANSFER_IN(String value){
        setValue(value);
    } 

    public String getValue(){
          return this.value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

Ai vc poderia fazer suas modificações do jeito que quiser depois:

public static void main(String... args) {
    TRANSFER_IN x = TRANSFER_IN.ONCE;
    
    x.setValue("Duas Vezes");
}

Como vc pretendia usar o enum? Pra que ele vai servir?

1 curtida

Valeu, era exatamente isso que eu queria saber. Muito obrigado a todos pela ajuda. [quote=“wldomiciano, post:6, topic:343019”]
Como vc pretendia usar o enum? Pra que ele vai servir?
[/quote]
Eu queria ter uma espécie de “combobox” no objeto. Eu poderia utilizar uma variável int para definir o valor, mas eu queria algo mais elegante.

Parece-me que não percebeste o conceito de enum.

Não tens de chamar nenhum construtor nem criar novamente nenhuma enum.

x já tem o valor “ONCE”. x.getValue() já devolve “Uma vez”.

Para mudar para outro basta

x = TRANSFER_IN.ON_MODIFICATION;

e x.getValue() já devolve “Quando houver alguma modificação”.

2 curtidas

Então não é necessário mexer com setters?

Realmente acho desnecessário mexer com setters quando vc lida com enums.

1 curtida