Я считаю требование, чтобы поля были окончательными, чрезмерно ограничительным и ошибкой разработчиков языка Java. Есть времена, например обработка дерева, когда вам нужно установить константы в реализации, которые необходимы для выполнения операций над объектом типа интерфейса. Выбор пути к коду в реализующем классе - это вызов. Обходной путь, который я использую, состоит в том, чтобы определить интерфейсную функцию и реализовать ее, возвращая литерал:
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";
}
...
}
Однако использовать этот синтаксис было бы проще, понятнее и менее подвержено аберрантной реализации:
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";
...
}