是否可以设计自己的Java类型,类似于可扩展的enum
?
例如,我拥有某个模块使用的用户角色,然后子包提供了其他角色。
JDK方面会涉及什么?
答案 0 :(得分:4)
由于Enums无法扩展,您必须伪造它。
使用受保护的构造函数创建一个类。
然后您可以在班级中创建public static final FakeEnum
个实例。
public class FakeEnum {
private String name;
private Object something;
protected FakeEnum(String name, Object otherParam) {
this.name = name;
this.something = otherParam;
}
// public getters
public static final FakeEnum ONE = new FakeEnum("one", null);
public static final FakeEnum TWO = new FakeEnum("two", null);
public static final FakeEnum THRE = new FakeEnum("thre", null);
}
然后你可以扩展它并添加更多东西,如下:
public class ExtendedFakeEnum extends FakeEnum {
public static final FakeEnum EXTENDED_ONE = new FakeEnum("extended_one", null);
public static final FakeEnum EXTENDED_TWO = new FakeEnum("extended_two", null);
}
答案 1 :(得分:1)
确定,
我要做的是编写一个接口,然后编写几个实现,以了解如何查找在特定事件中通知的用户。正确的实现将在运行时注入,然后它将执行它需要做的任何事情来找到正确的用户。该实现可以简单地使用参数来配置要查找的组名,然后返回用户列表。
我正在学习更多地使用接口/设计合同。我过去的大部分开发都只有一个实现,所以我认为这是一个没有实际意义的点,忘记了这个工具/手段。
谢谢,
沃尔特
答案 2 :(得分:0)
可扩展枚举的概念没有意义。枚举用于静态声明将为其自己的类型创建的整个实例集。允许延长它将使得无法确保。
答案 3 :(得分:0)
用Java设计自己的类型是不可能的。您需要做的任何事情都可以使用各种设计模式来完成。
答案 4 :(得分:0)
如果你需要一个“可扩展的枚举”,那么字典可能会更适合你,请查看java.util.Dictionary<K,V>
其中K是键名(如何引用特定值,V是值/应该由所述密钥返回的对象。
我认为这是我最接近可扩展的Enum。
另外,看看at this question on SO,这也可以解决它。