繁体   English   中英

Java:enum toString()

[英]Java: enum toString()

我创建了一个枚举,我试图让我的枚举支持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);
            }
        };
    }
}

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

public String toString(Object... o) {
    return String.format(text, o);
}

从设计的角度来看,我不会发布文本(即有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);
    }
}

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

如果需要传递更多参数( toString()不接收任何参数toString()则不能覆盖toString() )。 只需在枚举中定义一个新方法,无需覆盖:

public String getAsFormattedText(Object... o) {
    return String.format(text, o);
}

你不应该把这个方法命名为toString() ,它会让你感到困惑,因为你没有返回当前对象的字符串表示,而是返回一个作为参数传递的对象的格式化字符串。 另外, text()方法应该被称为getText() ,这是Java约定。

最好使用一个清楚地表明返回的字符串不是任何字符串的名称 - 它是一个格式化的字符串,希望将文本格式化为参数 - getAsFormattedText()清楚地表达了这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM