web-dev-qa-db-fra.com

Énumérer avec la valeur int dans Java

Quel est le Java équivalent de C #:

enum Foo
{
  Bar = 0,
  Baz = 1,
  Fii = 10,
}
51
ripper234

Si vous voulez des attributs pour votre enum vous devez le définir comme ceci:

public enum Foo {
    BAR (0),
    BAZ (1),
    FII (10);

    private final int index;   

    Foo(int index) {
        this.index = index;
    }

    public int index() { 
        return index; 
    }

}

Vous l'utiliseriez comme ceci:

public static void main(String[] args) {
    for (Foo f : Foo.values()) {
       System.out.printf("%s has index %d%n", f, f.index());
    }
}

La chose à réaliser est que enum n'est qu'un raccourci pour créer une classe, vous pouvez donc ajouter les attributs et les méthodes que vous souhaitez à la classe.

Si vous ne voulez pas définir de méthodes sur votre enum vous pouvez changer la portée des variables membres et les rendre public, mais ce n'est pas ce qu'elles font dans le exemple sur le site Web de Sun .

81
Dave Webb

Si vous avez une plage de valeurs contiguës et que vous n'avez besoin que de la valeur entière, vous pouvez simplement déclarer l'énumération de manière minimale:

public enum NUMBERZ {
        ZERO, ONE, TWO
}

puis obtenez la valeur int comme suit:

int numberOne = NUMBERZ.ONE.ordinal();

Cependant, si vous avez besoin d'une plage non contiguë (comme dans votre exemple, où vous passez de 1 à 10), vous devrez écrire votre propre constructeur enum qui définit votre propre variable membre et fournir une méthode get pour cette variable, comme décrit dans les autres réponses ici.

15
Carl

Il est:

enum Foo
{
  Bar(0),
  Baz(1),
  Fii(10);

  private int index;

  private Foo(int index) {
      this.index = index;
  }
}

Notez que pour obtenir la valeur de l'énumération à partir de l'index, Foo.valueOf(1) (*), ne fonctionnerait pas. Vous devez le coder vous-même:

public Foo getFooFromIndex(int index) {
    switch (index) {
    case 0:
        return Foo.Bar;
    case 1:
        return Foo.Baz;
    case 10:
        return Foo.Fii;

    default:
        throw new RuntimeException("Unknown index:" + index);
    }
}

(*): Enum.valueOf () retourne l'énumération d'une chaîne. En tant que tel, vous pouvez obtenir la valeur Bar avec Foo.valueOf('Bar')

4

On dirait que vous voulez quelque chose comme ça:

public enum Foo {
    Bar(0),
    Baz(1),
    Fii(10);

    private int number;

    public Foo(int number) {
       this.number = number;
    }

    public int getNumber() {
        return number;
    }
}

Pour commencer, Sun's Java Enum Tutorial serait un excellent endroit pour en savoir plus.

2
Peter
public enum Foo {
    Bar(0),
    Baz(1),
    Fii(10);

    private final int someint;
    Foo(int someint) {
        this.someint = someint;
    }
}

Dans Java sont très similaires aux autres classes, mais le compilateur Java sait traiter un peu différemment dans diverses situations. Donc, si vous voulez des données dedans comme vous semblez avoir besoin d'une variable d'instance pour les données et d'un constructeur approprié.

0
Tendayi Mawushe