本帖最后由 张权 于 2013-4-28 22:45 编辑
偏執旳、靑春 发表于 2013-4-28 21:19
你是在修改枚举的源码?
我们来一步步分析源码
1.先用put方法这个方法是hashtable的
哦, 明白了,谢谢啊, 唉!!
调用put方法是添加到 Entry 中,
但是, 在调用propertyNames()方法时, 内部new了一个新的Hashtable, 那么这个Hashtable 也有一个自己的Entry,这个Entry是没有值的, 然后通过调用enumerate方法, 把 老的Entry中的值, 放到新的Entry中去, 然后获取键, 再返回...
还是代码看少了, 练少了, 这个本来我分析也是这么回事, 可是就上面说的没有想通, 没有考虑到新new的一个Hashtable对象, 有一个新的Entry, 接着又因为调用enumerate方法时, 里面的for循环 调用keys方法,获取所有键, 我又把它弄混了, 以为是调用的新Hashtable里面的Entry, 因为新的Entry根本就没有值,所以这样就矛盾了, 一直想不通, 其实是自己恰好搞反了,谢谢了啊! 这里我自己又简单的写了一个模拟代码:
//A类就相当是Hashtable类
class A {
//StringBuilder就相当是Entry
StringBuilder sb = new StringBuilder();
public String put(String str) {
sb.append(str);
return sb.toString();
}
public String keys() {
return sb.toString();
}
}
//B类就相当是Properties类
class B extends A{
public String propertyNames() {
A a = new A();
fun2(a);
return a.keys();
}
public void fun2(A a) {
a.sb.append(keys());
}
}
|