Considero que el requisito de que los campos sean definitivos es indebidamente restrictivo y un error de los diseñadores del lenguaje Java. Hay momentos, p. manejo de árbol, cuando necesita establecer constantes en la implementación que son requeridas para realizar operaciones en un objeto del tipo de interfaz. Seleccionar una ruta de código en la clase de implementación es un kludge.La solución que yo uso es definir una función de interfaz e implementarlo mediante la devolución de un literal:
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";
}
...
}
Sin embargo, sería más sencillo, más claro y menos propensos a la puesta en práctica aberrante de utilizar esta sintaxis:
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";
...
}
No es necesariamente cierto que los campos finales son constantes; eso solo está garantizado para los tipos primitivos. En general, la palabra clave final simplemente significa que la ubicación de la memoria no cambiará. – Pops
No dije que los campos finales son constantes, solo que las constantes son campos finales. Tenga en cuenta que está permitido poner un campo final estático no primitivo en una interfaz. Aunque el contenido de ese campo podría cambiar, la referencia al mismo es constante. –
@AdriaanKoster Dijo exactamente que el campo final es constante: * Ningún estado se aplica solo permitiendo constantes. * - esta oración implica que todos los campos finales son constantes. Puede tratar de seguir argumentando sobre las palabras que utilizó, pero obviamente su declaración es engañosa. –