有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

枚举Java如何设计自己的类型?

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

例如,我有一个特定模块使用的用户角色,然后一个子包提供额外的角色

JDK方面会涉及什么


共 (5) 个答案

  1. # 1 楼答案

    由于枚举不能扩展,所以必须伪造它

    使用受保护的构造函数创建一个类

    然后可以在类中创建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);
    
    }
    
  2. # 2 楼答案

    可扩展枚举的概念毫无意义。枚举用于静态声明将为其自身类型创建的整个实例集。如果允许它被延长,就无法确保这一点

  3. # 3 楼答案

    如果您需要一个“可扩展枚举”,那么字典可能更适合您,请查看java.util.Dictionary<K,V>,其中K是键名(您将如何引用特定值,V是所述键应返回的值/对象)

    我认为这是我最接近可扩展枚举的一次

    另外,看看at this question on SO,这也可能解决它

  4. # 4 楼答案

    好的

    我要做的是编写一个接口,然后编写几个实现,以了解如何在特定事件中找到要通知的用户。正确的实现将在运行时被注入,然后它将做任何需要做的事情来找到正确的用户。该实现可能只需要使用参数来配置要查找的组名,然后返回用户列表

    我正在学习更多地使用界面/合同设计。我过去的大部分开发都只有一个实现,所以我把这看作是一个没有实际意义的观点,而忘记了那个工具/方法

    谢谢,

    沃尔特

  5. # 5 楼答案

    用Java设计自己的类型是不可能的。您需要做的任何事情都可以使用各种设计模式来完成