我已经使用以下代码将ArrayList
(比如值"Cat", "Dog", "Fish"
)转换为人类可读的字符串(例如"Cat,Dog,Fish"
),这是一项简单的任务,但我想要优雅地扩展它。到目前为止我得到的是:
public static String makeStringList(Iterable<String> items) {
StringBuilder sb = new StringBuilder();
for (String item : items) {
sb.append(item);
sb.append(",");
}
if (sb.length() > 0) {
sb.deleteCharAt(sb.length() - 1);
}
return sb.toString();
}
但是我有另一个ArrayList
Enum
个{I}}值的对象,比如说:
enum Animal {
cat("Cat"),
dog("Dog"),
fish("Fish");
String value;
Animal(String num) {
value = num;
}
}
包含ArrayList<Animal>
的{{1}}。
扩展(Animal.cat, Animal.dog, Animal.fish)
功能的最佳方式是什么,以便它接受makeStringList
或ArrayList
的{{1}}个?我已尝试将参数更改为Enum
并使用String
,但显然我的枚举不会延伸Iterable<Object> items
,因此没有toString()
。我还尝试使用函数Object
创建一个接口toString()
,该接口效果很好但不适用于字符串。
有没有一种优雅的方法可以扩展makeStringList函数来接受对象或枚举?显而易见的答案是重载makeStringList,但我想将问题限制为不涉及重载的答案。
答案 0 :(得分:2)
枚举确实有toString
方法。您可以根据需要覆盖它。您必须在函数参数中使用Iterable<?>
而不是Iterable<Object>
以允许除Object之外的其他类型。在集合中使用泛型总是令人困惑。
答案 1 :(得分:1)
我已尝试将参数更改为
Iterable<Object>
项并使用toString()
,但显然我的枚举不会延伸Object
所以没有toString()
枚举不能不扩展Object
,因为Java中的所有枚举扩展java.lang.Enum<T>
,它扩展了对象。您需要做的就是覆盖实现中的toString
,如下所示:
@Override
public String toString() {
return value;
}