Java 泛型类型的迭代器设计模式
我正在尝试为泛型类型实现迭代器设计模式。我不能使用泛型数组来存储集合,有人能帮我设计泛型类型的迭代器模式吗 我的代码在这里:Java 泛型类型的迭代器设计模式,java,generics,Java,Generics,我正在尝试为泛型类型实现迭代器设计模式。我不能使用泛型数组来存储集合,有人能帮我设计泛型类型的迭代器模式吗 我的代码在这里: public class NamesRepository<T> implements Container<T> { public NamesRepository(){ names = new T[]; // Compilation error } public T names[]; @Overri
public class NamesRepository<T> implements Container<T> {
public NamesRepository(){
names = new T[]; // Compilation error
}
public T names[];
@Override
public Iterator<T> getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator<T>{
private int index;
@Override
public boolean hasNext() {
if(index<names.length)
return true;
return false;
}
@Override
public T next() {
if(this.hasNext())
return names[index++];
return null;
}
}
}
公共类名称存储库实现容器{
公共名称存储库(){
name=newt[];//编译错误
}
公共T名称[];
@凌驾
公共迭代器getIterator(){
返回新名称迭代器();
}
私有类NameIterator实现了迭代器{
私有整数索引;
@凌驾
公共布尔hasNext(){
if(index。相反,您可以存储一个对象[]
数组,并键入要返回到T
的元素:
public NamesRepository(){
names = new Object[5]; // You forgot size here
}
public Object names[];
然后将next()
方法更改为:
@Override
public T next() {
if(this.hasNext()) {
@SuppressWarnings("unchecked")
T value = (T)names[index++];
return value;
}
return null;
}
您可以将hasNext()
方法更改为一行:
@Override
public boolean hasNext() {
return index < names.length;
}
@覆盖
公共布尔hasNext(){
返回索引
前面已经讨论过很多次了。如果必须使用数组,您可以按照问题的答案进行操作
但是,您可以创建类型参数的列表
。不需要技巧,而且更灵活
public NamesRepository(){
names = new ArrayList<T>(); // Easy creation
}
public List<T> names;
公共名称存储库(){
名称=新建ArrayList();//易于创建
}
公开名单名称;
然后,迭代器的hasNext()
方法可以将其索引与names.size()
进行比较,而next()
方法可以返回names.get(index++)
。您甚至可以通过调用names.remove(index)来实现iterator
接口remove()
所需的其他方法