web-dev-qa-db-fra.com

Emplacement d'énumération privée dans une classe en Java

En déclarant une énumération dans une classe Java, j'ai vu ces 2 approches:

1)

public class MyClass {

    private enum MyEnum {
        A, B, C;
    }

    /* Static fields */

    /* Instance variables */

    /* Methods */
}

2)

public class MyClass {

    /* Static fields */

    /* Instance variables */

    /* Methods */

    private enum MyEnum {
        A, B, C;
    }
}

Lequel est le plus utilisé? Y a-t-il une convention pour cela?

15
miviclin

Généralement, en Java, les types de données imbriqués (par exemple, classes, enums) sont placés au bas d’un fichier.

Toutefois, pour résumer, les domaines privés comme celui que vous avez posté (qui ressemblent davantage à des champs), je choisirais le premier.

Pour les énumérations plus longues, je choisirais le numéro 2 ou les classerais dans un fichier séparé.

17
Joel Christophel

Il n'y a rien de mal avec l'un d'eux. C'est plus une question d'opinion, mais j'irais bien # 1.

0
Noris

Aucune convention n'a été utilisée pour cela, mais d'après ce que j'ai vu, l'exemple 1 est utilisé plus souvent. Personnellement, je les place de cette façon aussi.

0
Troubleshoot

Java n'a pas d'instruction typedef (comme en C et C++). Pour déclarer de nouveaux types en Java, vous déclarez une nouvelle classe; alors les variables peuvent être déclarées comme étant du type de cette classe. De plus, Java utilise Renvoi des références , le compilateur Java est plus intelligent que le compilateur C, en ce sens qu'il permet d'appeler des méthodes avant leur définition. Cela évite de déclarer des fonctions dans un fichier d'en-tête avant de les définir dans un fichier de programme, comme c'est le cas dans C.

Je peux placer ma enum n'importe où et y accéder de n'importe où. Référencez l'exemple.

class CheckEnum{

    private void method1() {
        System.out.println(enumTest.test1);    
    }       
    private enum enumTest{
        test1
    }       
    private void method2() {
        System.out.println(enumTest.test1);
    }
}

J'ai vérifié et les deux méthodes method1 et method2 ont accès à enumTest

0
Rupesh