2017-10-17 39 views
0

Quelle est la différence entre ces deux déclarations?Déclaration Int Def Java

public static final int a = 0; 
    public static final int b = 1; 
    public static final int c = 2; 

    @IntDef({a, b, c}) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface SomeIntDef { 
    } 

et

@IntDef({a, b, c}) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface SomeIntDef { 
     int a = 0; 
     int b = 1; 
     int c = 2; 
    } 

Je veux dire ce qui est la meilleure pratique ou il des différences techniques entre ces deux déclarations.

+0

La première est de définir les trois valeurs possibles de la 'int'; ce dernier ne définit aucune valeur possible, mais ajoute 3 champs (sans signification sémantique) avec des valeurs par défaut à l'annotation. –

Répondre

0

Oui, il y a une différence.

public static final int a = 0; 
    public static final int b = 1; 
    public static final int c = 2; 

    @IntDef({a, b, c}) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface SomeIntDef { 
    } 

Vous déclarez des champs statiques de la classe ancre (parent) de SomeIntDef. Voilà donc comment vous faites référence à ce

YourParentClass.a 

D'autre part,

@IntDef({a, b, c}) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface SomeIntDef { 
    int a = 0; 
    int b = 1; 
    int c = 2; 
    } 

Vous allez faire référence comme

ParentClass.SomeIntDef.a 

Vous pouvez également écrire comme classe indépendante. (Création d'une nouvelle annotation dans un autre fichier .java) qui rend l'utilisation

SomeIntDef.a 

Ces différents usages changent la lisibilité.

Tous sont acceptable, mais le choix est le plus significatif pour votre conception.

Bonne chance

Emre