下面是我编写的一个程序,用于理解Java中的泛型编程。 你可能已经注意到我是java的新手并不奇怪这个程序不能编译。
import java.util.*;
public class GenericBox<T>
{
private List<T> t;
private Iterator<T> itor;
public GenericBox()
{
t = new ArrayList<T>();
itor = t.listIterator();
}
public void insert(T t)
{
itor.add(t);
}
public T retrieve()
{
if(itor.hasNext())
{
return itor.next();
}
}
public static void main (String [] args)
{
GenericBox <String> strbox = new GenericBox<String>();
GenericBox <String> intbox = new GenericBox<String>();
strbox.insert(new String("karthik"));
strbox.insert(new String("kanchana"));
strbox.insert(new String("aditya"));
String s = strbox.retrieve();
System.out.println(s);
s = strbox.retrieve();
System.out.println(s);
s = strbox.retrieve();
System.out.println(s);
}
}
我得到的编译错误如下。
GenericBox.java:17: error: cannot find symbol
itor.add(t);
^
symbol: method add(T)
location: variable itor of type Iterator<T>
where T is a type-variable:
T extends Object declared in class GenericBox
1 error
有人可以在这里指出究竟是什么问题。
答案 0 :(得分:5)
您的错误不是泛型。它们是可行的。您的错误在:
itor.add(t);
您不会将对象添加到迭代器。
您将它们添加到列表中。迭代器只能枚举和迭代它们。使用
this.t.add(t);
我将列表重命名为tList
并将代码更改为:
private List<T> tList;
private Iterator<T> itor;
public GenericBox()
{
t = new ArrayList<T>();
itor = tList.listIterator();
}
public void insert(T t)
{
tList.add(t);
}
依旧......
答案 1 :(得分:3)
您已声明类型为itor
的对象Iterator<T>
,并使用ListIterator<T>
类型的对象对其进行初始化。因此,通过引用itor
,您只能访问Iterator<T>
的方法。如果您要访问add()
的{{1}}方法,则必须将ListIterator
声明为itor
。
答案 2 :(得分:2)
Iterator<T>
没有add<T>(T)
方法。您可能打算拨打this.t.add(t);
而不是itor.add(t);
。