我知道你在说什么。
例如,我想要一个接口(我称之为 ExecutableList)有一个名为USER_FRIENDLY_NAME
public interface ExecutableList<T extends ExecutableList<T,E>,E> //This is type parameter
extends List<E>, //self referencing. Trust
Comparable<E>, //me, it has its uses.
{
/** This would declare a constant but leave it to sub-interfaces/classes to define it. */
abstract String USER_FRIENDLY_NAME;
//Define the rest of your interface
}
不幸的是,这在 Java 中是不可能的。当您在 Java 接口中声明一个字段时,它意味着修饰符public
、static
和final
. 未来可能会允许添加对 Java 编程语言的更改abstract
,从而制作隐含的修饰符public abstract static final String USER_FRIENDLY_NAME;
,但是虽然您可以为此明确定义规则,但该词的使用abstract
会令人困惑,因为abstract
通常final
理解为定义相反的含义。
我正在祈祷未来版本的 Java 将实现这一点。我听说 Java 9 将添加私有接口方法(用于在默认方法之间使用),但还没有关于该语言添加的消息。我敢肯定,首先要考虑许多向后兼容性问题。如果 Oracle 的任何人读到此内容,请让我们在接口中声明常量并让继承类/接口定义它们!!!
同时,您唯一的选择是String getUserFriendlyName();
在您的接口或抽象类中定义一个方法。没有那么优雅,也许没有那么高效,但你目前没有其他选择。