[英]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.Enumeration
和java.util.Iterator
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.