76 votes

Pourquoi les constructeurs enum ne peuvent-ils pas être protégés ou publics en Java?

Toute la question est dans le titre. Par exemple:

 enum enumTest {

        TYPE1(4.5, "string1"), TYPE2(2.79, "string2");
        double num;
        String st;

        enumTest(double num, String st) {
            this.num = num;
            this.st = st;
        }
    }
 

Le constructeur convient bien avec le modificateur par défaut ou private , mais me donne une erreur de compilation si les modificateurs public ou protected spécifiés.

110voto

jjnguy Points 62123

Pensez à Enums comme une classe avec un nombre fini d'instances. Il ne peut y avoir aucune instance différente de celles que vous déclarez initialement.

Ainsi, vous ne pouvez pas avoir de constructeur public ou protégé, car cela permettrait de créer plus d'instances.

Remarque: ce n'est probablement pas la raison officielle. Mais il est plus logique pour moi de penser à enums cette façon.

22voto

Cristian Sanchez Points 11266

Parce que vous ne pouvez pas appeler le constructeur vous-même.

Voici ce que les tutoriels sur Enums ont à dire:

Remarque: Le constructeur d'un type enum doit être un accès privé à un package ou privé. Il crée automatiquement les constantes définies au début du corps enum. Vous ne pouvez pas invoquer vous-même un constructeur d’énumération.

10voto

harto Points 28479

Les énumérations contiennent un ensemble fixe de valeurs, qui doivent toutes être connues au moment de la compilation. Cela n'a pas de sens de créer de nouveaux littéraux au moment de l'exécution, ce qui serait possible si le constructeur était visible.

0voto

Mondain Points 5200

Le modificateur public fonctionnera à coup sûr, comme indiqué dans le tutoriel http://download.oracle.com/javase/tutorial/java/javaOO/enum.html Privé et protégé fonctionnera également s'il est utilisé dans une classe. J'ai fait un exemple de version privée ici: http://ideone.com/mb5Le%


public class Main {
    private enum Test {
        TEST1, TEST2;
    }
    public Test getTest1() {
        return Test.TEST1;
    }
    public static void main(String[] args) {
        Main m = new Main();
        System.out.println(m.getTest1());
    }
}

-3voto

rohit Points 29

si vous souhaitez déclarer enum public, sauvegardez le fichier enum avec le nom du enum .

Supposons que vous fassiez un enum Book{} puis l'enregistriez par Book.java et créiez un fichier séparé pour la classe

c'est le seul moyen de déclarer enum public.

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