Map.Entry源代码问题

涯若 2017-02-22 08:37:14
Map集合在遍历的时候可以使用迭代器iterator,也可以使用Map.Entry : map.entrySet()来foreach。查看其源代码,即entrySet()方法的源代码,发现不理解的问题。先贴出源代码:
public Set<Map.Entry<K,V>> entrySet() {
return entrySet0();
}
private Set<Map.Entry<K,V>> entrySet0() {
Set<Map.Entry<K,V>> es = entrySet;
return es != null ? es : (entrySet = new EntrySet());
}
EntrySet类的代码省略。不理解之处在于为什么不直接在entrySet()方法中实现entrySet0中的代码,而是通过调用entrySet0方法。是因为public和private吗?如果是,是为了什么?本人java能力尚浅,还望赐教。谢谢
...全文
262 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
steely_chen 2017-02-24
  • 打赏
  • 举报
回复
你的源码来自哪个实现类,不同的实现类实现的方法不一样。但我看了大部分实现类都跟你的代码不一样。
oO临时工Oo 2017-02-24
  • 打赏
  • 举报
回复
我经常会写出以下代码
public String login(){
     try{
        return this.login0();
   }cacth(e){
         return "error";
    }
}

private String login0(){
           //假设这里有200行代码
}
oO临时工Oo 2017-02-24
  • 打赏
  • 举报
回复
现个方法完全一样,没有区别。如果你喜欢,可以把entrySet0改成entrySet(当然调用的地方也得改) 唯一觉得的可能是:由于写代码的本人、以及代码维护的历史原因造成的。 如果你觉得不爽,你可以鄙视这样写代码的人
涯若 2017-02-24
  • 打赏
  • 举报
回复
引用 1 楼 解开者的回复:
这是反编译的吗?怎么我的代码和这个不一样
我从源代码压缩包里面提取的。你是哪个版本的?
解开者 2017-02-24
  • 打赏
  • 举报
回复
这是反编译的吗?怎么我的代码和这个不一样
涯若 2017-02-24
  • 打赏
  • 举报
回复
确实应该看看其他地方是不是也调用了entrySet0()方法。可是如果是这样的话,为什么不把所有的方法都设计成这个样子?
jiajing1990_ 2017-02-24
  • 打赏
  • 举报
回复
你可以看看 entrySet0() 方法是不是其他地方也调用了
逗泥丸的平方 2017-02-24
  • 打赏
  • 举报
回复
想看我代码 ? 嘿嘿 气死你 其实是这样可能感觉上便于维护吧. 而且如果entrySet0有多处调用,这种写法可以避免在其他地方直接调用public的方法... 毕竟public方法可能因为外部的需求进行改动.

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧