Ritengo che i campi siano definitivi indebitamente restrittivi e un errore da parte dei progettisti del linguaggio Java. Ci sono momenti, ad es. gestione degli alberi, quando è necessario impostare le costanti nell'implementazione necessarie per eseguire operazioni su un oggetto del tipo di interfaccia. La selezione di un percorso di codice nella classe di implementazione è un kludge.La soluzione che uso è quello di definire una funzione di interfaccia e implementarlo restituendo un letterale:
public interface iMine {
String __ImplementationConstant();
...
}
public class AClass implements iMine {
public String __ImplementationConstant(){
return "AClass value for the Implementation Constant";
}
...
}
public class BClass implements iMine {
public String __ImplementationConstant(){
return "BClass value for the Implementation Constant";
}
...
}
Tuttavia, sarebbe più semplice, più chiara e meno soggetto a attuazione aberrante per utilizzare questa sintassi:
public interface iMine {
String __ImplementationConstant;
...
}
public class AClass implements iMine {
public static String __ImplementationConstant =
"AClass value for the Implementation Constant";
...
}
public class BClass implements iMine {
public static String __ImplementationConstant =
"BClass value for the Implementation Constant";
...
}
fonte
2014-04-03 19:13:11
Non è necessariamente vero che i campi finali sono costanti; questo è garantito solo per i tipi primitivi. In generale, la parola chiave finale indica semplicemente che la posizione della memoria non cambierà. – Pops
Non ho detto che i campi finali sono costanti, solo che le costanti sono campi finali. Si noti che è consentito inserire un campo finale statico non primitivo in un'interfaccia. Anche se il contenuto di quel campo potrebbe cambiare, il riferimento ad esso è costante. –
@AdriaanKoster Hai detto esattamente che il campo finale è costante: * Nessuno stato è applicato solo consentendo costanti. * - questa frase implica che tutti i campi finali sono costanti. Potresti provare a discutere ulteriormente delle parole che hai usato, ma ovviamente la tua dichiarazione è in leasing fuorviante. –