2010-10-25 2 views
9

Puis-je créer des variables public static final dans une interface? Puis-je conserver des valeurs constantes communes définies dans ces fichiers?Java: Les interfaces peuvent-elles contenir des variables constantes définies dans ces interfaces?

+0

N'est-ce pas quelque chose qui est trivial à simplement * essayer *? Vous avez un compilateur fonctionnel, n'est-ce pas? –

+0

Je suis désolé, je dois reformuler. J'ai essayé et ça marche. Mais je voulais plutôt savoir si c'est une bonne pratique. – kiki

+0

duplicata possible de [Devrait-on placer une collection de constantes dans une classe ou une interface?] (Http://stackoverflow.com/questions/1372991/should-a-collection-of-constants-be-placed-in-a- classe-ou-interface) –

Répondre

14

Oui, vous pouvez:

public interface Constants 
{ 
    public static final int ZERO = 0; 
} 

Cependant, il est généralement pas être compté une bonne idée de nos jours. Ce n'est pas si grave si l'interface a un but réel ainsi que, et les constantes sont susceptibles d'être utilisées par la plupart des implémentations ... mais l'introduction d'une interface juste pour faciliter l'accès aux constantes est un abus de l'objectif des interfaces, vraiment. (Et c'est ce qui arrivait souvent.)

+0

Alors, quelle est la solution? Définir une autre classe simplement pour définir ces constantes? – kiki

+0

@kiki: Cela dépend de la situation. Parfois, les enums fonctionnent bien au lieu de constantes. Parfois, les avoir dans une interface naturelle existante est aussi propre que toute autre chose. Parfois, gardez-les avec la classe qui les concerne le plus fortement. Parfois, créez une nouvelle classe. –

+1

Si vous implémentez l'interface uniquement pour éviter de les préfixer avec le nom de l'interface. –

1

Oui, vous pouvez conserver des constantes dans les interfaces. BTW, c'est considéré comme pas très bonne pratique.

1

Certes, les constantes public peuvent être utilisées déclarées à l'intérieur des interfaces. Une chose, cependant, si votre interface va juste être des espaces réservés pour les constantes, utilisez enum au lieu de