当前位置: 首页 > 知识库问答 >
问题:

对自定义类的泛型类型使用迭代器

华良平
2023-03-14
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(); 

结果是:<代码>无法从静态上下文引用非静态类项

MyClass deq = new MyClass();
ListIterator<Item> it = deq.iterator(); 

结果是:<代码>无法从静态上下文引用非静态类项

MyClass deq = new MyClass();
ListIterator it = deq.iterator(); 

结果:非静态类Deque2。ListIterator不能从静态上下文中引用

编辑:

我调用的是类而不是方法。这项工作:

迭代器it=deq。迭代器();

我认为,由于iterator()中返回的实例的类型是ListIterator,因此我需要使用该类型声明“it”。

共有1个答案

焦同
2023-03-14

您已将您的类声明为

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

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

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

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

 类似资料:
  • 我试图为自己的泛型类编写自己的迭代器。我一直在看几个YouTube教程,在网上搜索。 IntelliJ指出的问题是,我不能像我试图的那样在迭代器类中使用getleft和getright,因为非静态方法不能从静态上下文中引用。我一直在研究静态和更多,但无法解决这个问题。我是完全走错了路,还是至少我的方法有点接近? 运行时: 我遇到了一个无休止的循环,打印5。因此,迭代器本身可以工作,但我的方法有一个

  • 改型异步请求是用两个方法onResponse()和onFailure()回调的。 我还想使用Gson转换器来转换改型响应,然后用APIPesponse包装它。 如果我用like 好像不起作用。不能将json响应数据解析到结果对象中。 有人能帮助如何让用调用enqueue吗?结果是使用Gson转换器解析json数据内容。 有人能帮我指出这个问题吗?

  • 考虑一个具有的API,如下所示: 很简单,只有页面大小和跳过计数属性。 此外,现在我还有一些类,它们也包含但未分页。 在我的测试中,我希望他们都能实现一个接口,这样我就可以用一些更基本的测试来生成一个通用的基本测试类。为此,我添加了我认为会起作用的内容: 我将PagedResults更改为: 错误 但现在编译器抱怨PagedResultBase继承的所有地方的使用情况(?)从。 但是,如果我将接口

  • Rust 自定义数据类型主要是通过下面这两个关键字来创建: struct: 定义一个结构体 enum: 定义一个枚举类型 而常量的创建可以通过 const 和 static 关键字来创建。

  • 存在多种方法来重新定义现有类型的行为以及提供新的类型。 重写类型编译 一个常见的需求是强制更改类型的“字符串”版本,即在create table语句或其他SQL函数(如cast)中呈现的版本。例如,应用程序可能希望强制呈现 BINARY 适用于除一个平台外的所有平台 BLOB 待渲染。在本例中,使用现有的泛型类型 LargeBinary ,是大多数用例的首选。但是为了更准确地控制类型,每个方言的编

  • 1. 包含头文件 #import <AdHubSDK/AdHubSDK.h> 2. AdHubCustomView 的创建和初始化 在需要导入广告的ViewController头文件中导入头文件并声明实例以及声明代理 #import <AdHubSDK/AdHubSDK.h> @interface AdHubCustomViewController ()<AdHubCustomViewDele