今天真他娘的冷啊,打算研读研读Properties的源码取取暖,前面都挺顺利,狗日的到keySet()这就不明白了,先贴上调试的代码
keySet()方法一进来做一个非空判断,第一次调用的时候必然为空,但是为空的时候他new了一个内部的KeySet类的对象,直接new了一个对象他就拿到了本map中所有的key,到这里一想肯定是这个内部类的构造方法做了什么优雅的操作,点进Properties.KeySet这个类一看
嘿,这狗日的啥构造器都没有,别慌张,他还有父类呢,父类点进去,空参构造,空代码块,父类的父类点进去,也是啥都没有。那这可咋整啊,光new了一个内部类这就拿到了全部的key了?不可能,一定是哪个细节的哪个调用漏了。于是呼,我把这个内部类的所有方法打上了断点,
如图所示,看看他究竟是有啥特殊的,凭什么就new了它一下它就能拿到本map中所有的key,结果debug运行,下一步,下一步,下一步,他娘的程序跑完了,一个断点都没进,这证明跟它的方法都没关系?其实不然,我后来又把HashMap.KeySet翻了一遍,跟Properties里的这个大致相同,码了个疤子的,不想写了,室友打呼,戴耳机都没用