Java - 如何设计自己的类型?

时间:2010-06-18 13:23:15

标签: enums java

是否可以设计自己的Java类型,类似于可扩展的enum

例如,我拥有某个模块使用的用户角色,然后子包提供了其他角色。

JDK方面会涉及什么?

5 个答案:

答案 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,这也可以解决它。