Я считаю требование о том, чтобы поля были окончательными, излишне ограничивающими и ошибкой разработчиков языка 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";
...
}