[英]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.