Java:enum toString()

Pop*_*oko 6 java string enums

我创建了一个枚举,我试图让我的枚举支持String.format操作,该操作获得无限数量的参数返回一个字符串.我只设法返回一个对象,使用这个方法后我必须做一个toString()/ cast.我猜这是一个更"干净"的方法,或者可能更好地覆盖toString()方法.基本上,我想支持该toString()方法,但遗憾的是没有设法这样做,所以我创建了这个方法.你可以看到它的名字text(..)而不是toString().

我怎么能做得更好?我想要的理想解决方案就是toString(..)返回String.

public enum MY_ENUM {

    VALUE_A("aaa %s"), VALUE_B("bbb %s");

    private String text;

    MY_ENUM(String text) {
        this.text = text;
    }

    public String text() {
        return this.text;
    }

    public Object text(final Object... o) {
        return new Object() {
            @Override
            public String toString() {
                return String.format(text(), o);
            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 9

我知道你要去哪里......我认为这就是你想要的(测试过,它有效):

public String toString(Object... o) {
    return String.format(text, o);
}
Run Code Online (Sandbox Code Playgroud)

从设计的角度来看,除非你真的需要,否则我不会发布文本(即有getter) - text用作格式字符串的事实是一个实现选择.我会这样做:

public static enum MY_ENUM {

    VALUE_A("aaa %s bbb %s"),
    VALUE_B("bbb %s");

    private final String text;

    MY_ENUM(String text) {
        this.text = text;
    }

    public String toString(Object... o) {
        return String.format(text, o);
    }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我真的很喜欢上课的想法.之前没见过.