【问题标题】:Using an iterator for generic type on a custom class在自定义类上使用泛型类型的迭代器
【发布时间】:2014-10-01 22:17:46
【问题描述】:
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){

    } 
}

如何将此迭代器与泛型类型一起使用?这些是我在“主要”功能中尝试过的方法:

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

【问题讨论】:

  • 投反对票是因为?我清楚地列出了我的问题,并准确显示了我遇到的错误。天哪。
  • 我承认给出该错误的通用 Item 类型参数在 Stack Overflow 上并不常见,但内部类是。
  • 抱歉,我没有对您投反对票,我只向您提供了一个已被确定为此错误消息的“最佳”答案的答案。它可能适用于您的情况,也可能不适用,但您可能至少应该添加 Item 类的类定义(存根),以便我们可以查看它是否真的是非静态的并嵌入到另一个类中。
  • @NobuGames 这是一个通用的。看这个链接:docs.oracle.com/javase/tutorial/extra/generics/simple.html定义在哪里?

标签: java generics iterator


【解决方案1】:

您已将您的班级声明为

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多