2010-02-20 63 views
2

我有两个Enum S作为如下:Java的ENUM问题

enum Connector { 
    AND, OR, XOR; 
} 

enum Component { 
    ACTIVITY 
} 

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

那么,我应该给follower变量输入什么样的数据?

回答

2
private Enum follower; 

而且可以使双方枚举实现相同的接口,例如Follower,让现场:

private Enum<? extends Follower> follower; 

但你最好重新设计了整个事情,它不会感觉这边请。

+0

Can Enums可以像类一样拥有父子关系吗?如果他们可以,那么我凸轮使枚举(连接器和组件)作为父枚举的孩子,并指定作为“追随者”变量的数据类型 – 2010-02-20 11:24:36

+0

枚举是essentialyl公共YourEnum扩展枚举',你可以不会延伸其他任何东西。但是你可以实现接口。 – Bozho 2010-02-20 11:34:08

0

我会建议创建一个名为Follower的新类。即使可能,我也不确定单个变量应该有两种不同的类型。

我倾向于将枚举看作原始数据类型,您的问题就像是问我如何使变量为int或long。

-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()); 

} 

}

2

您可以使用一个接口两个枚举:

interface X {} 

enum Connector implements X{ 
    AND, OR, XOR; 
} 

enum Component implements X{ 
    ACTIVITY 
} 
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需要一种方法,则必须更改声明在每个地方。这可能永远不会出现在你的场景中,但是以这种方式使用这么少的成本,这是很好的防守练习。

第二个稍微不重要的优点,更多的是关于味道:它避免了这种类型的泛型,当你包含通配符时,泛型会变得不可读。