Java枚举问题

标签 java enums

我有两个Enum,如下所示:

enum Connector {
    AND, OR, XOR;
}

enum Component {
    ACTIVITY
}

现在,我在 Event 类中有一个名为 follower 的变量。此变量(follower)可以(并且应该具有)来自上述两个 Enum 中的任何一个的值。

那么,我应该为 follower 变量提供什么数据类型?

最佳答案

声明 follower 的接口(interface)字段。

public interface Follower {
    // any methods
}

并让两个枚举都实现该接口(interface)。

public enum Connector implements Follower {
    AND, OR, XOR;
}


enum Component implements Follower {
    ACTIVITY
}

然后你可以声明你的字段:

Follower follower = Connector.OR;  

或者

Follower follower = Component.ACTIVITY;

与将该字段声明为 Enum<? extends Follower> 相比,这有几个明显的优势(我能想到的)。通过这种方式,您可以自由地将方法添加到 Follower接口(interface),而无需将来修改字段,而您无法控制 Enum输入,所以如果您决定 Follower如果需要一个方法,则必须在每个地方更改声明。您的场景可能永远不会出现这种情况,但使用这种方式的成本很低,这是很好的防御实践。

第二个稍微不那么重要的优点,更多的是关于品味:它避免了类型中的泛型,当您包含通配符时,泛型可能会变得不太可读。

关于Java枚举问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301989/

相关文章:

java - 从 JSF 传递枚举值作为参数(重新访问)

objective-c - 是否可以将枚举范围限定为 Objective-C 中的类?

java - Paypal测试账号发送失败

java - 在 Java 中将数组作为方法参数传递

java - Mongodb:查找嵌入数组中的最低元素

java - 检查字符串是否包含在枚举集中,时间复杂度为 O(1)

java - 在某个线程中的 jaBehaviorSubject 上运行 doOnNex

java - 基于 Ç 的字符串分割

java - 需要有关 Java 枚举设计结构的建议

python - 如何键入使用默认值动态创建的枚举?