Enumerados e Conjuntos

6 respostas
F

Estou começando em JAVA, programo em Delphi.

Com o Delphi eu consigo definir enumerados e conjuntos. Ex:

type
EnumDiasSemana = (segunda, terca, quarta, quinta, sexta, sabado, domingo); //enumerado

type
ConjDiasSemana = set of EnumDiasSemana; //conjunto

Depois de definido os tipos posso utilizar no sistema:

var

DiaFolga: EnumDiasSemana;

DiasFolga: ConjDiasSemana;
essas variaveis podem ser utilizadas da seguinte maneira:

DiaFolga := Domingo;

DiasFolga := [Sabado, Domingo];

e posso verificar:

if DiaFolga = Domingo then …
if Sabado in DiasFolga then …

  • Como fazer essa estrutura em JAVA? Qual recurso posso utilizar para implementar algo parecido com isso?

Agradeço,
Fábio.

6 Respostas

Rafael_Steil

Use classes. Por exemplo:

public class DiasSemana {
    public static final int DOMINGO = 1;
    public static final int SEGUNDA = 2;
    public static final int TERCA = 3;
    public static final int QUARTA = 4;
    public static final int QUINTA = 5;
    public static final int SEXTA = 6;
    public static final int SABADO = 7;

    private DiasSemana() {}
}

ai, para usar, vc pode fazer algo como

int diaFolga = DiasSemana.DOMINGO;
int[] variosDiasFolga = { DiasSemana.DOMINGO, DiasSemana.SABADO };
if (diaFolga == DiasSemana.DOMINGO) { ... }
public boolean inDiasFolga(int dia, int[] folgas) {
    for (int i = 0; i < fogas.length; i++) {
        if (folgas[i] == dia) {
            return true;
        }
    }

    return false;
}

if (inDiasFolga(DiasSemana.SABADO, variosDiasFolga)) {
    // sabado esta no dia de folga
}

E assim por diante. Ha estruturas de dados um pouco mais complexas que ficam mais parecidas com enums, como o pattern TypeSafeEnum. Mas, muitas vezes, ter eles implementados eh muito mais uma questao de deixar o sistema mais “OO friendly” do que qualquer outra coisa.

Rafael

cv1
"Rafael Steil":
Use classes. Por exemplo:
public class DiasSemana {
    public static final int DOMINGO = 1;
    public static final int SEGUNDA = 2;
    public static final int TERCA = 3;
    public static final int QUARTA = 4;
    public static final int QUINTA = 5;
    public static final int SEXTA = 6;
    public static final int SABADO = 7;

    private DiasSemana() {}
}

Melhor ainda, use o pattern TypeSafe Enum ;)

public class DiaSemana implements java.io.Serializable {
  public static final DiaSemana DOMINGO = new DiaSemana(1); 
  public static final DiaSemana SEGUNDA = new DiaSemana(2);
  public static final DiaSemana TERCA = new DiaSemana(3);
  ...

  private DiaSemana(int dia) {
    this.dia = dia;
  }
  
  private int dia;

  public int getDia() { return dia; }
}

Assim, nao tem como errar e botar um int qualquer no lugar da constante ;)

danieldestro
"cv":
Melhor ainda, use o pattern TypeSafe Enum ;)
public class DiaSemana implements java.io.Serializable {
  public static final DiaSemana DOMINGO = new DiaSemana(1); 
  public static final DiaSemana SEGUNDA = new DiaSemana(2);
  public static final DiaSemana TERCA = new DiaSemana(3);
  ...

  private DiaSemana(int dia) {
    this.dia = dia;
  }
  
  private int dia;

  public int getDia() { return dia; }
}

Assim, nao tem como errar e botar um int qualquer no lugar da constante ;)

nao faltou o equals( )?

Jupter

Parece que a nova versão do java tem o q vc precisa.

Vale apena conferir em http://java.sun.com/developer/technicalArticles/releases/j2se15/

cv1

Sim, faltou um monte de coisa, equals(), hashCode(), compareTo()… era so um exemplo, diacho :smiley:

F

Valew pessoal!!!

[]s…
Fábio.

Criado 3 de junho de 2004
Ultima resposta 4 de jun. de 2004
Respostas 6
Participantes 5