在Java中设置枚举值为空字符串

5

我有一个Java对象,我正在尝试从以下结构的枚举类中进行设置。

public enum Code {
    CODE_A,
    CODE_B,
    CODE_C,
    CODE_D,
    CODE_E,
    CODE_F,
    EMPTY("")
}

我想把对象设置为空字符串,即: Object.setCode(Code.EMPTY)

当我查看我的对象时,它的code属性的值应该是""而不是EMPTY

请问有什么方法可以解决这个问题? 我不想修改下面的 Object.setCode setter 方法:

public void setCode(Code code) {
    this.code = code;
}

此外,问题在于Object.setCode(必须是对象代码类型)


1
重写枚举CodetoString方法。 - Blip
1
调用了哪种 Code 方法?如果是 toString(),那么你可以重写它。如果是 name(),那么我认为你不能将其更改为空字符串。 - Daniel Pryden
正如之前的评论所指出的,您如何调用 Code 枚举?它是在任何 UI 中作为 ComboBox 的项目或类似物中调用的吗? - Blip
4个回答

5
你可以为每个枚举变量赋一个值,并重写toString()方法,这样调用Code.EMPTY时会返回值""而不是"EMPTY"。
enum Code{

    CODE_A("STRING_A"),
    CODE_B("STRING_B"),
    EMPTY("");

    // Assigning a value to each enum
    private final String code;
    Code(String code){
        this.code = code;
    }

    // Overriding toString() method to return "" instead of "EMPTY"
    @Override
    public String toString(){
        return this.code;
    }

}

运行Code.CODE_A将返回"STRING_A",运行Code.EMPTY将返回""


2

试试这个。

public enum Code {
    CODE_A,
    CODE_B,
    CODE_C,
    CODE_D,
    CODE_E,
    CODE_F,
    EMPTY("");
    final String name;
    Code(String name) { this.name = name; }
    Code() { this(null); }
    @Override
    public String toString() {
        return name == null ? super.toString() : name;
    }
}

并且
System.out.println("CODE_A=" + Code.CODE_A);
System.out.println("EMPTY=" + Code.EMPTY);

结果:

CODE_A=CODE_A
EMPTY=

1

你想将枚举值设置为字符串值?它们不兼容,所以无法工作。尝试这样做:

public class Main {
    public static class Code {
        public static final String CODE_A = "A";
        public static final String CODE_B = "B";
        public static final String CODE_C = "C";
        public static final String EMPTY = "";
    }

    private String Code;

    public void setCode (String code){
        this.code = code;
    }

}

如果你现在说:

setCode (Main.Code.EMPTY);

您的'Main'实例中的变量'code'将是一个空字符串。

我有50多个枚举常量,将它们全部变成字符串似乎不是一个很好的方法。 - CodeMonkey

0

尝试从EMPTY中删除空字符串参数,然后像这样覆盖toString

public enum Code {
    CODE_A,
    CODE_B,
    CODE_C,
    CODE_D,
    CODE_E,
    CODE_F,
    EMPTY

    @Override
    public String toString() {
        return this == EMPTY ? "" : this.name();
    }
}

另请参阅{{link1:Enum.name()}}。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接