Interfaces para constantes

é muito feio fazer uma interface só para definir e compartilhar constantes entre várias classes? Se sim, qual a melhor alternativa?

interface SoConstantes {
    int ZERO = 0;
    int UM = 1;
    int DOIS = 2;
}

[quote=“marciolx”]é muito feio fazer uma interface só para definir e compartilhar constantes entre várias classes? Se sim, qual a melhor alternativa?

interface SoConstantes { int ZERO = 0; int UM = 1; int DOIS = 2; } [/quote]
se é feio eu não sei nem acho, mas uso bastante…

Nao eh “feio”, mas o Joshua Bloch, do EffectiveJava, recomenda usar uma classe normal, com construtor privado. O lance eh que, ao usar interfaces, voce estaria dando a entender que eh para alguem implementar a interface. Portando, basta voce usar

public class SoConstantes {
    private SoConstantes() {}

    public static final int ZERO = 0;
    public static final int UM = 1;
    public static final int DOIS = 2;
} 

Rafael

[quote=“Rafael Steil”]Nao eh “feio”, mas o Joshua Bloch, do EffectiveJava, recomenda usar uma classe normal, com construtor privado. O lance eh que, ao usar interfaces, voce estaria dando a entender que eh para alguem implementar a interface. Portando, basta voce usar
[/quote]

obrigado :smiley:

Esse é um dos anti-patterns, segundo vários autores, então sim, é “feio” (apesar de bastante prático).
O legal é que no Java 1.5 vai ter um recurso que serve justamente para isso!
Mas por enquanto, melhor fazer como o Rafael falou.

Uma dica muito importante no caso de seu Enum implementar Serializable é ter um readResolve(), caso contrario fica impossivel usar comparação por identidade nos teus tipos