有没有可能设计自己的Java Type,类似于可扩展的enum?
例如,我有一个特定模块使用的用户角色,然后一个子包提供了额外的角色。
在JDK方面会涉及到什么?
发布于 2010-06-18 21:56:07
好的,
我要做的是编写一个接口,然后是如何在特定事件中查找要通知的用户的几个实现。正确的实现将在运行时注入,然后它将执行所需的任何操作来找到正确的用户。该实现可以简单地采用参数来配置要查找的组名,然后返回用户列表。
我正在学习更多地使用接口/契约设计。我过去的大多数开发都只有一个实现,所以我认为这是一个没有意义的点,并忘记了那个工具/方法。
谢谢,
沃尔特
发布于 2010-06-18 21:26:02
因为枚举不能被扩展,所以你必须伪造它。
使用受保护的构造函数创建一个类。
然后,您可以在类中创建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);
}发布于 2010-06-18 21:26:37
可扩展枚举的概念没有意义。枚举用于静态声明将为其自己的类型创建的整个实例集。允许它延长将使这一点不可能得到保证。
https://stackoverflow.com/questions/3069926
复制相似问题