遵循更紧密的面向对象方法,您可以为 TreeSet 和 HashMap 类创建装饰器。然后,不是调用 show(object),而是调用 object.show(),恕我直言,它更干净,并且遵循 OOP 原则,例如封装和抽象:
public interface Showable {
void show();
}
public class ShowableTreeSet<E> extends TreeSet<E> implements Showable
{
private TreeSet<E> delegate;
public ShowableTreeSet(TreeSet<E> delegate) {
this.delegate = delegate;
}
public void show() {
for (E e : delegate) {
System.out.println(e);
}
}
public boolean add(E e) {
return delegate.add(e);
}
//all other delegate methods
}
public class ShowableHashMap<K, V> extends HashMap<K, V> implements Showable
{
private HashMap<K, V> delegate;
public ShowableHashMap(HashMap<K, V> delegate) {
this.delegate = delegate;
}
public void show(){
Iterator<K> iterator = delegate.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next().toString();
String value = delegate.get(key).toString();
System.out.println(key + " " + value);
}
}
public int size() {
return delegate.size();
}
//all other delegate methods
}
因此,您只需将可展示的内容包裹在您将使用的任何实际对象周围:
ShowableTreeSet<String> sts = new ShowableTreeSet<String>(new TreeSet<String>());
sts.show();
或者,如果您只想要任何 Showable 用于打印输出,您可以:
Showable showable = new ShowableTreeSet<String>(new TreeSet<String>());
showable.show();
您可以为几乎任何东西创建这些装饰器 - Iterable、List、Collection 等......然后使用依赖注入来使用您碰巧使用的任何 Collection(Iterable、List...)实现。