具有多个数据类型字段的Java Enum?

时间:2012-06-13 17:47:17

标签: java enums

我有以下字段

a(String)
b(String)
c(String)
d(boolean)
e(boolean)

是否可以将它们全部放入Enum中,如下所示?

public enum Fields {
  a("A")
  b("B")
  c("C")
  d(true)
  e(false)
}

4 个答案:

答案 0 :(得分:2)

您可以拥有它们,但您应该定义以Stringboolean作为参数的构造函数。

public enum Constants {

CONSTANT_STRING1("CONSTANT_VALUE1"), 
CONSTANT_STRING2("CONSTANT_VALUE2"), 
CONSTANT_STRING3("CONSTANT_VALUE3");
CONSTANT_FLAG1(false);
CONSTANT_FLAG2(true);

private String constants;
private boolean flag;

private Constants(String cons) {
this.constants = cons;
}

private Constants(boolean lFlag) {
this.flag= lFlag;
}
}

答案 1 :(得分:0)

听起来你使用枚举来存储常量,这是不好的做法。

答案 2 :(得分:0)

有可能,但我建议不要这样做。在大多数情况下,您真正​​想要的是一个通用接口,它由两个(或更多)不同的类实现。

请注意,枚举实现接口是完全合法的,但很少看到两个枚举实现相同的接口,如下例所示:

public interface Fields {
}


public enum StringFields implements Fields {

    A("A"),
    B("B"),
    C("C")

    private StringFields(String str) {
        this.str = str;
    }

    private final String str;
}


public enum BooleanFields implements Fields {

    D(true),
    E(false);

    private BooleanFields(boolean val) {
        this.val = val;
    }

    private final boolean val;
}

答案 3 :(得分:-2)

你可以在枚举中有两个不同的构造函数,但这意味着你需要有两个字段(其中一个没有被设置)。我认为这没有多大意义。

public enum Fields {
    a("A"), b("B"), c("C"), d(true), e(false);

    Fields(String str) {

        strval = str;
        value = false;

    }

    Fields(boolean val) {

        strval = null;
        value = val;

    }

    private final String strval;
    private final boolean value;

}

EDITED ***立即编译。你必须同时初始化两者。