gpt4 book ai didi

java - JDK Hashmap 源代码 - 匿名内部类和抽象实例化?

转载 作者:搜寻专家 更新时间:2023-11-01 01:52:50 24 4
gpt4 key购买 nike

问题

我试图了解 Sun 如何实现 HashMap 类的 entrySet、keySet 和 values 方法,但我遇到了对我来说没有意义的代码。

我从概念上理解这些方法返回直接链接到 HashMap 中的 map.entry 列表的 View ,并且它们在大部分工作中使用自己的迭代器(引用中央 HashMap 迭代器)。不过,我的问题是首先要理解这些 View 是如何被实例化的(因为它们不是副本,而是位于实际 HashMap 列表之上的东西)。

引用

我正在查看位于此站点上的源代码:http://developer.classpath.org/doc/java/util/HashMap-source.html

这是给我带来麻烦的片段之一:

 157:   private transient Set<Map.Entry<K, V>> entries;

594: public Set<Map.Entry<K, V>> entrySet()
595: {
596: if (entries == null)
597: // Create an AbstractSet with custom implementations of those methods
598: // that can be overridden easily and efficiently.
599: entries = new AbstractSet<Map.Entry<K, V>>()
600: {
601: public int size()
602: {
603: return size;
604: }
605:
606: public Iterator<Map.Entry<K, V>> iterator()
607: {
608: // Cannot create the iterator directly, because of LinkedHashMap.
609: return HashMap.this.iterator(ENTRIES);
610: }
611:
612: public void clear()
613: {
614: HashMap.this.clear();
615: }
616:
617: public boolean contains(Object o)
618: {
619: return getEntry(o) != null;
620: }
621:
622: public boolean remove(Object o)
623: {
624: HashEntry<K, V> e = getEntry(o);
625: if (e != null)
626: {
627: HashMap.this.remove(e.key);
628: return true;
629: }
630: return false;
631: }
632: };
633: return entries;
634: }

问题

  • 在第 599 行,此代码正在实例化 AbstractSet 类。这怎么可能?我试图自己重新创建它,但出现了预期的编译错误。

  • 我假设第 601、606、612、617 和 622 行中的公共(public)方法是匿名内部类?我以前从未使用过此功能,所以我不确定它是如何工作的,而且我在网上找到的唯一示例相当简单(并且主要涉及 Swing)。我必须假设第 599 行与匿名类直接相关,但我不了解具体情况。

如果有人能向我解释一下,我将不胜感激!谢谢!

最佳答案

On line 599 this code is instantiating the AbstractSet class. How is this possible?

通过匿名内部类。它正在创建 AbstractSet 的具体(但未命名)子类。您可以对接口(interface)执行相同的操作。例如:

Runnable runnable = new Runnable() {
@Override public void run() {
// Put some code in here...
}
};

I'm assuming that the public methods in lines 601, 606, 612, 617 and 622 are anonymous inner classes?

不是,整个类都是匿名内部类。这些是实现 AbstractSet 的抽象方法。

我建议您阅读 Java tutorial page on anonymous classes .

关于java - JDK Hashmap 源代码 - 匿名内部类和抽象实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306347/

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