我有两个Enum
S作为如下:Java的ENUM问题
enum Connector {
AND, OR, XOR;
}
enum Component {
ACTIVITY
}
现在,我有一类名为Event
变量follower
。该变量(follower
)可以具有(且应该具有)来自上述两个Enum
之一的值。
那么,我应该给follower
变量输入什么样的数据?
我有两个Enum
S作为如下:Java的ENUM问题
enum Connector {
AND, OR, XOR;
}
enum Component {
ACTIVITY
}
现在,我有一类名为Event
变量follower
。该变量(follower
)可以具有(且应该具有)来自上述两个Enum
之一的值。
那么,我应该给follower
变量输入什么样的数据?
private Enum follower;
而且可以使双方枚举实现相同的接口,例如Follower
,让现场:
private Enum<? extends Follower> follower;
但你最好重新设计了整个事情,它不会感觉这边请。
我会建议创建一个名为Follower的新类。即使可能,我也不确定单个变量应该有两种不同的类型。
我倾向于将枚举看作原始数据类型,您的问题就像是问我如何使变量为int或long。
为什么不能有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());
}
}
您可以使用一个接口两个枚举:
interface X {}
enum Connector implements X{
AND, OR, XOR;
}
enum Component implements X{
ACTIVITY
}
声明一个接口,为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
需要一种方法,则必须更改声明在每个地方。这可能永远不会出现在你的场景中,但是以这种方式使用这么少的成本,这是很好的防守练习。
第二个稍微不重要的优点,更多的是关于味道:它避免了这种类型的泛型,当你包含通配符时,泛型会变得不可读。
Can Enums可以像类一样拥有父子关系吗?如果他们可以,那么我凸轮使枚举(连接器和组件)作为父枚举的孩子,并指定作为“追随者”变量的数据类型 – 2010-02-20 11:24:36
枚举是essentialyl公共YourEnum扩展枚举',你可以不会延伸其他任何东西。但是你可以实现接口。 –
Bozho
2010-02-20 11:34:08