【发布时间】:2013-12-20 09:42:59
【问题描述】:
我编写了以下代码来将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 值,比如说:
enum Animal {
cat("Cat"),
dog("Dog"),
fish("Fish");
String value;
Animal(String num) {
value = num;
}
}
还有一个包含(Animal.cat, Animal.dog, Animal.fish) 的ArrayList<Animal>。
扩展我的makeStringList 函数以使其接受ArrayLists 或Enums 或Strings 的最佳方法是什么?我尝试将参数更改为Iterable<Object> items 并使用toString(),但显然我的枚举没有扩展Object,所以没有toString()。我还尝试使用函数getStringRepresentation 创建一个接口hasStringRepresentation,它很好用,但不适用于字符串。
有没有一种优雅的方法可以扩展 makeStringList 函数以接受对象或枚举?显而易见的答案是重载 makeStringList 但我想将问题限制为不涉及重载的答案。
【问题讨论】:
标签: java enums polymorphism superclass