import java.util.*;
public class MyClass<Item> implements Iterable<Item> {
public Iterator<Item> iterator(){ return new ListIterator();}
public class ListIterator implements Iterator<Item>{
...
}
public static void main(String[] args){
}
}
如何将此迭代器与泛型类型一起使用?这些是我在'main'函数中尝试过的方法:
MyClass <Item> deq = new MyClass();
ListIterator<Item> it = deq.iterator();
结果:non-static class Item cannot be referenced from a static context
MyClass deq = new MyClass();
ListIterator<Item> it = deq.iterator();
结果:non-static class Item cannot be referenced from a static context
MyClass deq = new MyClass();
ListIterator it = deq.iterator();
结果:non-static class Deque2.ListIterator cannot be referenced from a static context
修改:
我正在调用一个类而不是一个方法。这有效:
Iterator it = deq.iterator();
我认为因为iterator()中返回的实例的类型是ListIterator,我需要用'it'
声明该类型。
答案 0 :(得分:3)
您已将您的课程声明为
public class MyClass<Item> implements Iterable<Item> {
在声明中,您正在定义一个新的类型变量Item
。此类型变量绑定到实例(或者更确切地说,解析为实例引用值的表达式)。
它不能在静态上下文中使用,因为静态上下文中不存在实例。
对于ListIterator
,这是一个内部类。它与类型变量有同样的问题。它需要一个实例才能工作。