JVM 将枚举视为迭代器
Enumeration is considered as Iterator by JVM
我想知道为什么java.util.Enumeration被JVM认为是java.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>
定义的源代码。
迭代器和枚举是接口。它们是声明的,不能被实例化。所以无论 elements() returns 它将是一个实现 Enumeration 接口的实例。
如果您查看 Hashtable 代码,您最终会返回一个 java.util.Hashtable.Enumerator 类型的实例,实现枚举,迭代器
这就是为什么:)
hashTable.elements()
return 一个 java.util.Hashtable.Enumerator
对象,而这个 class 实现了 java.util.Enumeration
、java.util.Iterator
我想知道为什么java.util.Enumeration被JVM认为是java.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>
定义的源代码。
迭代器和枚举是接口。它们是声明的,不能被实例化。所以无论 elements() returns 它将是一个实现 Enumeration 接口的实例。
如果您查看 Hashtable 代码,您最终会返回一个 java.util.Hashtable.Enumerator 类型的实例,实现枚举,迭代器
这就是为什么:)
hashTable.elements()
return 一个 java.util.Hashtable.Enumerator
对象,而这个 class 实现了 java.util.Enumeration
、java.util.Iterator