不同的枚举值可以实现不同的接口吗?

时间:2014-04-08 10:09:20

标签: java enumeration

您好,

是否有可能不同的枚举值实现不同的接口(就像不同的枚举值可能实现不同的方法一样)?

我问的原因:我目前有一个具有一组public static final属性的类,每个属性共享一个公共接口,但在代码中的其他地方也需要一个不同的接口。

public interface Wrapper {}
public interface StringWrapper extends Wrapper {}
public interface IntegerWrapper extends Wrapper {}

public final class EnumerationOfWrappers {
    public static final StringWrapper ONE = ...;
    public static final IntegerWrapper TWO = ...;
}

public class SomeOtherClass {
    public String get(StringWrapper w);
    public Integer get(IntegerWrapper w);
}

由于类型擦除,我不能使用泛型但使用public static final属性而不是枚举常量接缝脏。我可以将方法命名为getStringgetInteger,但这种方式不必要。

- ooxi

1 个答案:

答案 0 :(得分:0)

当您声明一个枚举(比如Color)及其成员(比如BLUE,GREEN)时,这些成员的类型将被定义为枚举类型(即BLUE和GREEN的颜色为Color)。

在你的情况下;最多可以将基础类型存储为枚举值的成员变量。像这样:

enum WrapperEnum {
    ONE(EnumerationOfWrappers.ONE), 
    TWO(EnumerationOfWrappers.TWO);

    private Wrapper underlyingWrapper;

    WrapperEnum(Wrapper underlyingWrapper) {
        this.underlyingWrapper = underlyingWrapper;
    }
}