Enumerados e Conjuntos

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.

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

[quote=“Rafael Steil”]Use classes. Por exemplo:

[code]
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() {}

}
[/code][/quote]

Melhor ainda, use o pattern TypeSafe Enum :wink:

[code]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; }
}[/code]

Assim, nao tem como errar e botar um int qualquer no lugar da constante :wink:

[quote=“cv”]Melhor ainda, use o pattern TypeSafe Enum :wink:

[code]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; }
}[/code]

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

nao faltou o equals( )?

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/

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

Valew pessoal!!!

[]s…
Fábio.