Enum avec int value en Java

Quel est l’équivalent Java des C #:

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

Si vous voulez des atsortingbuts 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(Ssortingng[] args) { for (Foo f : Foo.values()) { System.out.printf("%s has index %d%n", f, f.index()); } } 

La chose à réaliser est que enum est juste un raccourci pour créer une classe, donc vous pouvez append les atsortingbuts et les méthodes que vous voulez à la classe.

Si vous ne souhaitez pas définir de méthodes sur votre enum vous pouvez modifier l’étendue des variables membres et les rendre public , mais ce n’est pas ce qu’elles font dans l’ exemple sur le site Web de Sun.

Si vous avez une plage de valeurs contiguës et que vous avez uniquement besoin 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(); 

Toutefois, 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.

C’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’enum 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 () renvoie l’énumération d’une chaîne. En tant que tel, vous pouvez obtenir la valeur Bar avec Foo.valueOf('Bar')

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, le tutoriel Java Enum de Sun serait un endroit idéal pour en apprendre davantage.

 public enum Foo { Bar(0), Baz(1), Fii(10); private final int someint; Foo(int someint) { this.someint = someint; } } 

En Java, les énumérations 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 telles que vous semblez avoir besoin d’une variable d’instance pour les données et d’un constructeur approprié.