Pessoal, posso utilizar uma classe abstrata como uma classe só de constantes ?? Eu tenho um arquivo properties aonde guardo alguns valores que utilizo em meu software, criei uma classe Abstrata soh com atributos do tipo
public static final
e neles carrego diretamento do arquivo properties seus valores. A Princípio esta tudo funcionando corretamente, mas a pergunta é, essa eh a maneira correta de se fazer ?? Se não for qual seria a maneira ideal ??!!
Valew pessoal
[quote=Guitar_Men]Pessoal, posso utilizar uma classe abstrata como uma classe só de constantes ?? Eu tenho um arquivo properties aonde guardo alguns valores que utilizo em meu software, criei uma classe Abstrata soh com atributos do tipo
public static final
e neles carrego diretamento do arquivo properties seus valores. A Princípio esta tudo funcionando corretamente, mas a pergunta é, essa eh a maneira correta de se fazer ?? Se não for qual seria a maneira ideal ??!!
[/quote]
Se vc carrega de um arquivo properties esses valores não são constantes, são variáveis de configuração.
Tudo bem que eles são constantes durante o tempo em que o programa corre…
Usar uma classe abstrata é melhor que usar uma interface. Mas o bom mesmo é usar uma classe não abstrata final e com contrutor privado.
Por outro lado vc poderia usar um esquema com enum. As enum são objetos constantes. Vc pode utilizar um mecanismo de encapsulamento para obter os valores das constantes
// no mesmo pacote
class final PameterRepository{
private PameterRepository(){}
static Map<Parameter , Object > parameters = new EnumMap<Parameter , Object>(Parameter.class);
}
enum Parameter {
PARMETER_A,
PARMETER_B,
PARMETER_C;
public Object getValue(){
return PameterRepository.parameters.get(this);
}
public boolean isValue(Object obj){
return obj.equals(PameterRepository.parameters.get(this));
}
}
// uso
if (Parameter.PARMETER_B.isValue("TOMATE") ){
return "pizza";
}
[size=18][color=red]NÃO[/color][/size]
Cara, aqui você está cometendo dois atentados à OO.
O primeiro é definir uma classe abstrata para manter um monte de constantes. Quem quiser utilizar essas constantes herdaria esta classe ou utilizaria os atributos diretamente.
Herança é um relacionamento É-UM. Utilizar a herança para casos que não são É-UM (por exemplo, para aproveitar um pouquinho de código) é um erro muito doloroso para consertar depois.
Se eu posso acessar estes atributos sem herdar da classe, que motivo eu teria para herdar? Nestes casos normalmente se cria uma classe [color=red]final[/color] com um [color=red]construtor privado[/color]. A famosa classe utilitária (que por si só também é uma ofensa a OO, mas uma ofensa bem menor do que esta que você estava fazendo, e muitas vezes ela é inevitável).
O segundo atentado é que os enums foram criados exatamente para acabar com essa putaria de “public static final” para definir uma tonelada de constantes. Se possível crie enums, ou então utilize objetos comuns.