繁体   English   中英

JVM将枚举视为迭代器

[英]Enumeration is considered as Iterator by JVM

我不知道为什么JVM将java.util.Enumeration视为j ava.util.Iterator 他们没有任何继承关系。

public interface Enumeration<E> {
....
}

public interface Iterator<E> {
...
}

Hashtable<String, Object> hashTable = new Hashtable<>();
hashTable.put("key1", 1);
hashTable.put("key2", 2);
hashTable.put("key3", 3);
Enumeration<Object> enumeration = hashTable.elements();
System.out.println(enumeration instanceof Enumeration);
System.out.println(enumeration instanceof Iterator);// why true here?

instanceof运算符将对象与指定类型进行比较。

由于返回的Enumarator实现了Iterator类型,因此条件变为true

 private class Enumerator<T> implements Enumeration<T>, Iterator<T>

这是HashTable's Enumerator<T>定义的源代码。

Iterator和Enumeration是接口。 它们是声明,不能实例化。 因此,无论elements()返回什么,它将是实现Enumeration接口的实例化。

如果查看Hashtable代码,最后将得到一个返回类型为java.util.Hashtable.Enumerator的实例,该实例将实现Enumeration,Iterator

所以这就是为什么 :)

hashTable.elements()返回一个java.util.Hashtable.Enumerator对象,该类同时实现java.util.Enumerationjava.util.Iterator

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM