-2

下面是我为了理解 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

有人可以指出这里到底是什么问题。

4

3 回答 3

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);
}

等等...

于 2013-07-26T22:22:34.430 回答
3

您已经声明了一个类型的对象itorIterator<T>用一个类型的对象对其进行了初始化ListIterator<T>。因此,通过引用itor,您只能访问Iterator<T>. 如果要访问then的add()方法必须声明为.ListIteratoritorListIterator

于 2013-07-26T22:24:24.377 回答
2

Iterator<T>没有add<T>(T)方法。您可能打算打电话this.t.add(t);而不是itor.add(t);.

于 2013-07-26T22:22:49.780 回答