在自定义类上使用泛型类型的泛型

时间:2014-10-01 22:17:47

标签: java generics iterator

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'声明该类型。

1 个答案:

答案 0 :(得分:3)

您已将您的课程声明为

public class MyClass<Item> implements Iterable<Item> {

在声明中,您正在定义一个新的类型变量Item。此类型变量绑定到实例(或者更确切地说,解析为实例引用值的表达式)。

它不能在静态上下文中使用,因为静态上下文中不存在实例。

对于ListIterator,这是一个内部类。它与类型变量有同样的问题。它需要一个实例才能工作。