具有类型混淆的自定义 Java 迭代器

2023-12-13

我有一个通用类,它捆绑了一个对象和一个订单:

public class OrderedObject<T> {
    private int order;
    private T object;

    public OrderedObject(int order, T object) {
        this.order = order;
        this.object = object;
    }

    public int getOrder() {
        return order;
    }

    public T getObject() {
        return object;
    }
}

我开发了一个Set存储的实现OrderedObject<T>实例并想要产生一个Iterator<T>按照内置顺序强制执行的顺序进行枚举:

public class OrderedObjectSet<T> extends AbstractSet<T> implements Set<T> {
    Set<OrderedObject<T>> s = new HashSet<OrderedObject<T>>();

    public boolean add(int order, T object) {
        return s.add(new OrderedObject<T>(order, object));
    }

    public Iterator<T> iterator() {
        return new OrderedObjectSetIterator<T>();
    }

    public int size() {
        return s.size();
    }

    private class OrderedObjectSetIterator<T> implements Iterator<T> {
        private int index;

        public boolean hasNext() {
            return index < s.size();
        }

        public T next() {
            T object = null;

            for (Iterator<OrderedObject<T>> it = s.iterator(); it.hasNext(); ) {
                OrderedObject<T> o = it.next();
                if (o.getOrder() == index) {
                    object = o.getObject();
                }
            }

            index++;
            return object;
        }

        public void remove() {
            throw new UnsupportedOperationException();
        }
    }
}

后一个类无法编译,因为似乎存在一些类型混淆Iterator初始化于

for (Iterator<OrderedObject<T>> it = s.iterator(); it.hasNext(); ) {

我忽略了什么?


混乱是因为内部类OrderedObjectSetIterator引入了一个名为 same 的泛型类型 (T) 作为外部类。 Eclipse IDE 显示警告:

The type parameter T is hiding the type T   

所以我想你不需要引入另一个参数类型,只需使用与外部类定义相同的参数类型即可。

基本上,内部类将定义为:

private class OrderedObjectSetIterator implements Iterator<T> {
....

迭代器方法如下:

public Iterator<T> iterator() {
    return new OrderedObjectSetIterator();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有类型混淆的自定义 Java 迭代器 的相关文章

随机推荐

  • 如何替换字符串中的括号

    我有一个包含标记的字符串列表 令牌是 ARG 令牌名称 我还有令牌的哈希图 其中键是令牌 值是我想要替换令牌的值 当我使用 replaceAll 方法时出现错误 java util regex PatternSyntaxException
  • mysql_real_escape_string() 无法建立到服务器的链接

    当我尝试使用 mysql real escape string 时出现此错误 Access denied for user ODBC localhost using password NO 我不明白为什么我必须连接到数据库来检查这些值是否可
  • 将 JSF 与 Spring 集成

    我还没有实现任何代码 我仍在研究新应用程序的整体架构 这将是我第一次使用JSF Spring 我需要将 Web 服务放在 Spring 服务 bean 业务逻辑层 前面 因为这些 bean 可以被表示层之外的其他应用程序访问 在为应用程序定
  • Scala 逆变和协变

    我正在研究 scala 的类型系统 发现了一个奇怪的情况 我有充分的理由相信 我不懂协变和协变 这是我的问题案例 我有两个类 Point 和 ColorPoint 它是 Point 的子类 class Point val x Int val
  • jQuery UI 按钮未“取消单击”

    http jqueryui com demos button default它们使用起来非常简单 但由于某种原因 我的按钮没有 取消点击 也就是说 在我单击按钮后 它保持其悬停样式 如果我将其 onClick 函数设置为仅执行一些简单的操作
  • 有没有办法检索 Dialogflow 中的对话历史记录?

    有没有办法获得用户和代理之间的完整对话 与我通过单击历史标签获得的结果非常相似 但是以编程方式获得 重点是将用户和代理之间的交互保存为文本 提前谢谢各位了 没有 API 可以直接从 Dialogflow 检索历史记录 但您可以做的是启用日志
  • 在python 2.7中同时运行脚本多次

    您好 我正在尝试多次运行脚本 但根据我的理解 希望这同时发生 我将一起使用子进程和线程 但是 当我运行它时 它看起来仍然是按顺序执行的 有人可以帮助我 以便我可以让它一遍又一遍地运行相同的脚本 但同时 它实际上有效但速度很慢吗 编辑忘记了最
  • 在 UIWebView 中显示 .rtf 文件

    我正在尝试显示为我的服务器下载的 rft 文件 我首先使用 UITextView 但我可以看到文本 但也显示了很多编码和与颜色和格式相关的奇怪字符 不管怎样 在这里搜索我发现 UITextView 无法正确显示 rtf 文本 因此 我继续尝
  • 如何在 R 中以美元格式设置条形图标签的格式?

    希望在 x 轴上的标签和条形图中的数字上添加美元符号 下面是我的代码和图表 YTD bar lt ggplot TYSales LYSales aes x as character FSCL YR y SALES geom bar stat
  • 如何在 Nuxt.js 中的内联样式中使用背景图像

    我有一个 vue我想在其中使用内联样式的文件 img src static img info production pic4 jpg class t22 a href page fresco art class btn t23 First
  • Tomcat 上的 Jersey REST 服务出现 404 错误

    我已经查看了有关该主题的所有可用答案 要么我面临一个完全不同的问题 要么我错过了一些重要的事情 服务等级 package org test import javax ws rs GET import javax ws rs Path imp
  • 通过API或网页公开数据库自增id

    我认为不公开自动递增的数据库 ID 帐户 产品等 是更好的方法 我们也许可以使用 UUID 并通过 API 或网页公开它们 但我查了一下 很多大公司似乎并不关心 谷歌 亚马逊 Facebook Twitter 似乎都有数字 自动递增帐户 I
  • htaccess重写不同页面的url

    我在 htaccess 文件中做了这个 用于从不同页面重写 url Options FollowSymLinks RewriteEngine on RewriteCond REQUEST FILENAME f RewriteCond REQ
  • 审计实体 JPA 中的更改

    我有 Spring MVC JPA 应用程序 我的应用程序中有几个实体在不断变化 我希望能够审核此更改 我发现有一个 Audited跟踪某些字段或整个实体的更改的注释 我想知道是否有任何方法可以配置此跟踪选项 我希望能够跟踪更改的内容以及更
  • git commit 出现致命错误“致命:CRLF 将被 LF 替换”

    我正在使用 Ubuntu 13 10 x64 我正在开发一个项目 一些开发人员正在使用 Windows 我最近更改了 git 配置core eol到 lf 和core autocrlf 输入 和core safecrlf到 真实 从那时起
  • dbplyr copy_to 不将表保存到数据库

    我正在尝试将本地数据帧从 R 复制到我的 db2 数据库 我有权写入该表 并且我已验证连接正常工作 我在用 copy to connection data frame name my table name 我收到以下错误 这对我来说没有意义
  • JSON_MODIFY 在 SQL Server 2017 中无法正常工作

    这是我的代码 DECLARE info NVARCHAR MAX searchQuery reportType ReportedHcEcg pageQuery pageNumber 1 pageSize 10 sortColumnName
  • 运行多个Python脚本

    我想创建一个简单的 Python 程序 它将同时执行 2 个独立的脚本 目前 这两个脚本只是打印一系列数字 但我的目的是在将来使用该程序同时运行一些 Twitter 流程 序 我怀疑我需要使用subprocess Popen但我不太清楚我应
  • 使用 google place Api 在 Android 中查找以公里为单位的距离

    我想显示两个地方的距离 以公里为单位 为此我编写了以下代码 hyd 17 38 78 48 eluru 16 7 81 1 private String getDistance double lat1 double lat2 double
  • 具有类型混淆的自定义 Java 迭代器

    我有一个通用类 它捆绑了一个对象和一个订单 public class OrderedObject