gpt4 book ai didi

java - 如何找到抽象方法 hasNext() 的实现?

转载 作者:行者123 更新时间:2023-12-04 18:00:23 26 4
gpt4 key购买 nike

我对以下与 Java OOP 和 Java API/源代码安排有关的情况感到困惑。基于Oracle's Java 8 API , hasNext() 是一个抽象方法,但是我找不到 hasNext() 在哪里实现。我读到私有(private)内部类用于在每个 Collection 类中实现不同的迭代器,但是没有更多关于如何找到实现位置的信息。一些用户建议我将 Java JRE 1.8 源代码添加到我的 Eclipse IDE 中,但我只能看到 boolean hasNext(); 在 Iterator 接口(interface)中声明为抽象方法。

如下所示,迭代器 obj 直接使用 hasNext() 而没有实现它。但是,有人告诉我您需要在接口(interface)中实现抽象方法。

我的问题:
(1)如何找到抽象方法hasNext()的实现?(2) 评论说我可以找到代码 here .为什么在ArrayList类中实现了hasNext(),却将hasNext()标记为抽象方法?以这种方式查找 hasNext() 实现并不直观。

    List<String> list = new ArrayList<String>();
list.add("item-1");
list.add("item-2");
list.add("item-3");

Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}

最佳答案

您可以在代码中看到,List 是一个 ArrayList。 ArrayList 中名为 iterator() 的方法将返回 Iterator 的实现。 Iterator 的此实现将实现 hasNext() 方法。

很好奇,正如评论所说,您可以在 IDE 中单击进入代码(或者如果这对您不起作用,请在调试器中设置一个断点并介入)。阅读 Java 代码是揭开它神秘面纱的好方法。

当然,您通常可以期望 Java 人员知道他们在做什么,并相信您返回的实现是合理的,适合一般用途。这里需要注意的是,您还应该阅读文档。例如。来自 https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

The iterators returned by this class's iterator and listIterator methods are fail-fast: if the list is structurally modified at any time after the iterator is created, in any way except through the iterator's own remove or add methods, the iterator will throw a ConcurrentModificationException. Thus, in the face of concurrent modification, the iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future.

关于java - 如何找到抽象方法 hasNext() 的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36168507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com