我有两个Enum
如下:
enum Connector {
AND, OR, XOR;
}
enum Component {
ACTIVITY
}
现在,我在类follower
中有一个名为Event
的变量。此变量(follower
)可以具有(并且应该具有)上述两个Enum
中的任何一个的值。
那么,我应该为follower
变量提供什么数据类型?
答案 0 :(得分:5)
声明follower
字段的接口。
public interface Follower {
// any methods
}
让这两个枚举实现该接口。
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
(我能想到)相比,这有一个明显的优势。通过这种方式,您可以自由地向Enum
接口添加方法而无需在将来修改字段,而您无法控制Follower
类型,因此如果您决定{{1}}需要一个方法,你必须在每个地方改变声明。对于你的场景,情况可能永远不会如此,但使用这种方式的成本非常低,这是一种很好的防御措施。
第二个,稍微不那么重要的优点,更多的是关于品味:它避免了类型中的泛型,当你包含通配符时,它会变得不那么可读。
答案 1 :(得分:2)
private Enum follower;
您可以让两个枚举实现相同的界面,例如Follower
,并让字段为:
private Enum<? extends Follower> follower;
但是你最好重新设计整个事情,这种方式感觉不对。
答案 2 :(得分:2)
您可以为两个枚举使用界面:
interface X {}
enum Connector implements X{
AND, OR, XOR;
}
enum Component implements X{
ACTIVITY
}
答案 3 :(得分:0)
我建议创建一个名为Follower的新类。我不确定单个变量是否应该有两种不同的类型,即使它是可能的。
我倾向于将Enums视为原始数据类型,你的问题就是问我如何使变量为int或long。
答案 4 :(得分:-1)
为什么不拥有java.lang.Enum类型的关注者。它是java中所有枚举的父级。 所以下面的代码工作正常。
package com.test;
enum NewEnum {
one, two;
}
enum Another {
three, four;
}
public class TestMe {
static Enum num = NewEnum.one;
public static void main(String[] args) {
System.out.println(num.toString());
num = Another.three;
System.out.println(num.toString());
}
static Enum num = NewEnum.one;
public static void main(String[] args) {
System.out.println(num.toString());
num = Another.three;
System.out.println(num.toString());
}