问题:
当我使用迭代器遍历HashMap只可以将Node强制转换成Entry才可以得到getValue和getKey方法。
但是我们在源码中可以发现Node节点继承了Entry
这意味着Node节点也一定有 getValue和getKey方法。
但我们却不能使用Node去接收迭代器找到的值。
询问了学校老师 答案是:
原来Node静态内部类的限定符是默认,而不能是public(因为内部类都不可以是public),在别的包调用的时候是不可以直接声明静态内部类对象的。
所以只能用Entry接收,刚好符合了抽象编程的思想。
总结:
在通过new HashMap().entrySet()获取到Set entrySet的时候,使用迭代器获取的Object类型的对象的getClass()方法拿到的类是class java.util.HashMap$Node,但是不能够将(Object)entrySet.iterator().next() 强制向下转换为 HashMap$Node,因为Node是HashMap的 静态内部类,并且该类的修饰符是缺省的,只能在同一个包中使用,但是Node是Map.Entry的实现类,所以这个(Object)entrySet.iterator().next()只能强制转换为Map.Entry类型,才能调用里边的getKey()、getValue()方法(小爽大佬回复我的)