我正在学习“Head First”系列中的设计模式。这本书有点过时(没有通用类型),所以我试图重写一些。我应该在Iterator
上编写 Wrapper ,以便像Enumerator
方法一样工作,并使用ArrayList 进行测试。
“原始”版本看起来像这样(下图)。我试图让它成为通用类,例如<E>
甚至<T<E>>
,但它不起作用。我想确保它适用于任何类型的迭代器,而不仅仅是ArrayList
ArrayList<T>
。实现这个的正确方法是什么?
public class IteratorWrapper implements Enumeration {
Iterator iterator;
public IteratorWrapper(Iterator iterator){
this.iterator = iterator;
}
public boolean hasMoreElements(){
return iterator.hasNext();
}
//Return generic Type T
public Object nextElement(){
return iterator.next();
}
}
测试课
public class WrapperTest {
public static void main(String[] args){
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("element1");
arrayList.add("element2");
//This part will be rewritten when wrapper will work
IteratorWrapper iteratorWrapper = new IteratorWrapper(arrayList.iterator());
while(iteratorWrapper.hasMoreElements()){
System.out.println(iteratorWrapper.nextElement());
}
}
}
答案 0 :(得分:3)
您可以添加如下通用参数:
public class IteratorWrapper<T> implements Enumeration<T> {
Iterator<T> iterator;
public IteratorWrapper(Iterator<T> iterator){
this.iterator = iterator;
}
public boolean hasMoreElements(){
return iterator.hasNext();
}
public T nextElement(){
return iterator.next();
}
}
然后,您的初始化将如下所示:
IteratorWrapper<String> iteratorWrapper = new IteratorWrapper<String>(arrayList.iterator());