我想知道是否可以强制由枚举实现接口(interface)。
我有以下界面:
public interface MobileApplication {
String name();
}
这应该由一个枚举实现,因为我需要保证名称的唯一性。
在设计图书馆时,我无法信任图书馆的用户,而且如果没有唯一的名称,我的图书馆将根本无法使用。
我可以没有安全性,只是想知道是否有可能。
谢谢
最佳答案
不幸的是,您实际上不能在编译时执行此操作。您可以通过要求使用诸如ordinal()
和name()
之类的方法来对此进行提示,或者可以在运行时进行检查。
关于“我不信任库用户”:只要您在接口(interface)JavaDoc中记录了需求,任何不遵循它的人都可以得到他所付的钱。
这与没有正确实现equals()
和hashCode()
的情况完全相同:编译器不会强制执行它,但是如果您将其破坏,则依赖于它们的类也会被破坏。
您可以获得的最接近的大概是这样的:
public interface EnumInterface<E extends Enum<E>> {
}
实现看起来像这样:
public enum MyInterfaceImpl implements EnumInterface<MyInterfaceImpl> {
FOO,
BAR;
}
这只是另一个提示,因为“恶意”开发人员仍然可以构建这样的类:
class NotAnEnum implements EnumInterface<MyInterfaceImpl> {
}
总而言之,总会有错误使用任何库的方法。库作者的目标是使正确使用库比不正确使用库更容易。您无需使其无法正确使用。
关于java - 是否可以强制仅由枚举实现接口(interface)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12088919/