Java ENUM问题

时间:2010-02-20 11:20:20

标签: java enums

我有两个Enum如下:

enum Connector {
    AND, OR, XOR;
}

enum Component {
    ACTIVITY
}

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

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

5 个答案:

答案 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()); }