1

我有以下领域

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

是否可以将它们全部放在一个枚举中,如下所示?

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

4 回答 4

3

您可以拥有它们,但您应该定义采用 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;
}
}
于 2012-06-13T17:51:21.203 回答
0

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

于 2012-06-13T17:49:20.783 回答
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;
}
于 2012-06-13T18:41:07.817 回答
-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;

}

已编辑*** 现在编译。您必须同时初始化两者。

于 2012-06-13T17:49:29.113 回答