web-dev-qa-db-fra.com

Instancier l'énumération

Considérez que j'ai la classe d'énumération suivante,

public enum Sample {
    READ,
    WRITE
}

et dans la classe suivante, j'essaie de tester la classe enum,

public class SampleTest {
    public static void main(String[] args) {
        testEnumSample(Sample.READ);
    }

    public static void testEnumSample(Sample sample) {
        System.out.println(sample);
    }
}

Ici, je spécifie Sample.READ puis le passe en tant que paramètre de la méthode testEnumSample. Au lieu de cela, si nous voulons instancier la classe enum et la passer en paramètre, que devons-nous faire?

10
Hariharan

Ici, je dois spécifier Sample.READ pour le passer en paramètre. Au lieu de cela, si nous voulons instancier la classe enum et la passer en paramètre, que devons-nous faire?

Que voudrait même dire "instancier la classe d'énum"? Le point essentiel d'une énumération est qu'il existe un fixed set of values ​​- que vous ne pouvez pas créer plus tard. Si vous voulez le faire, vous ne devriez pas utiliser d’énumération.

Il existe cependant d'autres moyens d'obtenir des valeurs enum. Par exemple, vous pourriez obtenir la valeur déclarée en premier:

testEnumSample(Sample.values()[0]);

ou peut-être transmettre le nom et utiliser Sample.valueOf:

testEnumSample("READ");

...

Sample sample = Sample.valueOf(sampleName);

Si vous expliquiez ce que vous tentiez de réaliser, il serait plus facile de vous aider.

23
Jon Skeet

En interne, les enums seront traduits en quelque chose comme ceci

class Sample extends Enum {
    public static final Sample READ = new Sample("READ", 0);
    public static final Sample WRITE = new Sample("WRITE", 1);

    private Sample(String s, int i)
    {
        super(s, i);
    }

    // More methods, e.g. getter
}

Ils ne doivent pas et ne peuvent pas être initialisés.

12
Marc

Enums ne supporte pas les constructeurs publics et ne peut donc pas être instancié. Les énumérations sont pour quand vous avez un ensemble fixe de constantes liées. Une seule instance sera créée pour chaque constante enum.

8
NINCOMPOOP

Vous ne pouvez pas créer une nouvelle instance enum. Sinon, ce ne sera pas une énumération . Vous pouvez référencer une énumération déjà existante. Comme dans votre exemple 

 Sample sample = Sample.READ;
2
WeMakeSoftware

Vérifiez ma réponse dans un autre post .

Il y a 2 façons:

Utilisez la fonction statique Enum.valueOf(), puis convertissez-la dans votre type enum.

Enum v = Enum.valueOf(TheEnumClass, valueInString);

Utilisez la fonction class.getEnumConstants() pour obtenir la liste des constantes d’énumération, et mettez cette liste en boucle et obtenez-la.

Plugins[] plugins = Plugins.class.getEnumConstants();
for (Plugins plugin: plugins) {
    // use plugin.name() to get name and compare
}
1
Mavlarn

Les éléments d'un Enum sont des objets qui sont des instances de la classe.

Vous n'avez pas besoin de créer un objet de Enum.

Voici un problème similaire

Référez-vous

1
MaheshVarma

Allez chercher un bon livre sur les bases de Java et lisez-le.

Quoi qu'il en soit, les énumérations en Java sont des classes avec un nombre fixe d'objets et les objets sont définis par ses attributs.

Encore une fois, vous pouvez lire quelque chose à ce sujet ici

0
vineet

Je réponds à la première question. Vous pouvez facilement le faire comme ceci:

public static void main(String[] args) {

    Sample.READ.testEnumSample();
}

public enum Sample {
    READ,
    WRITE;

    public void testEnumSample() {
        System.out.println(this);
    }
}
0
Bluetech91