51 votes

Enum avec int valeur en Java

Quelle est la Java équivalent de C#'s:

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

81voto

Dave Webb Points 90034

Si vous voulez attributs pour votre enum vous avez besoin de la 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 souhaitez utiliser 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 l' enum est juste un raccourci pour la création d'une classe, de sorte que vous pouvez ajouter que les attributs et les méthodes que vous souhaitez à la classe.

Si vous ne voulez pas définir toutes les méthodes sur votre enum vous pouvez modifier la portée des variables de membre et de faire leur public, mais ce n'est pas ce qu'ils font dans l' exemple sur le site web de Sun.

15voto

Carl Points 5553

Si vous avez une plage contiguë de valeurs, et tous vous avez besoin est la valeur de l'entier, vous pouvez simplement déclarer enum mini:

public enum NUMBERZ {
        ZERO, ONE, TWO
}

et ensuite obtenir la valeur int comme suit:

int numberOne = NUMBERZ.ONE.ordinal();

Toutefois, si vous avez besoin d'un discontinus gamme (comme dans votre exemple, lorsque vous sautez de 1 à 10), alors vous aurez besoin d'écrire votre propre enum constructeur qui vous permet de définir votre propre variable de membre, et de fournir une méthode get pour cette variable, comme décrit dans les autres réponses ici.

4voto

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 avez besoin de faire le code 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'enum à partir d'une Chaîne. En tant que tel, vous pouvez obtenir la valeur de la Barre avec Foo.valueOf('Bar')

2voto

Peter Points 5452

On dirait que vous voulez quelque chose comme ceci:

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 Java Enum Tutoriel serait un endroit idéal pour en apprendre davantage.

0voto

Tendayi Mawushe Points 10335
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 pour les autres classes, mais le compilateur Java sait traiter un peu différemment dans diverses situations. Donc, si vous voulez obtenir des données en eux comme vous semblez vous avez besoin d'une variable d'instance pour les données et un constructeur approprié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X