我正在写一个库,它有一组预定义的枚举值。比方说,我的枚举如下所示。
public enum EnumClass {
FIRST("first"),
SECOND("second"),
THIRD("third");
private String httpMethodType;
}
现在使用这个库的客户可能需要添加更多的值。比方说,客户端需要添加 CUSTOM_FIRST
和 CUSTOM_SECOND
。这不会覆盖任何现有值,而是使枚举具有 5 个值。
在此之后,我应该能够使用类似 <? extends EnumClass>
的东西来获得 5 种不变的可能性。
实现这一目标的最佳方法是什么?
原文由 Kiran A B 发布,翻译遵循 CC BY-SA 4.0 许可协议
你不能有一个
enum
扩展另一个enum
,你不能通过继承将值“添加”到现有的enum
然而,
enum
s可以实现interface
s。我要做的是让原始的
enum
实现一个标记interface
(即没有方法声明),然后你的客户可以创建自己的enum
interface
c2d4----
。然后你的
enum
值将由它们的公共interface
。为了加强要求,您可以让您的接口声明相关方法,例如,在您的情况下,在
public String getHTTPMethodType();
行中的内容。这将强制实施
enum
以提供该方法的实施。此设置加上足够的 API 文档应该有助于以相对可控的方式添加功能。
自包含示例(不要介意这里的惰性名称)
输出