weixin_42334111 2011-12-20 21:21
浏览 184
已采纳

如下Java代码,小弟看不明白,请高手明示。

以下代码是小弟从JForum论坛代码中抽象提取出来的(与JForumExecutionContext相关的)。
[code="java"]
public class Person{
private string name;

private static HashMap<String,Person> hm=new HashMap<String ,Person>();

public void setName(String name){this.name=name;}

public static Person getPerson(){
    Person p=hm.get("p1");
    if(p==null){
        p=new Person();
        hm.put("p1",p);
    }
    return p;
}
public static void setPerson(Person p){hm.put("p1",p);}

}
[/code]
[code="java"]
public class Test{
public static void main(String []args){
Person p=Person.getPerson();
p.setName("Jack");
p.setPerson(p);
}
}
[/code]

小弟一直迷惑的是Test类中,为什么还要加入p.setPerson(p);这一行代码,个人认为这行代码多此一举。如果必须要有p.setPerson(p);这行代码,原作者为什么要这样写,是不是用了什么设计模式?请高手明示,感激涕零!!! :D

  • 写回答

3条回答 默认 最新

  • dingjunfeng 2011-12-21 08:11
    关注

    以后再Person p=Person.getPerson(); 这样,取出Person对象,name的值是空的。

    刚才不知道怎么就提交了。

    再给出一个单例的写法,个人觉得这样好一些。

    [code="java"]public class Person {
    private String name;
    private static Person _instance = null;

    public void setName(String name) {
        this.name = name;
    }
    
    private Person() {
    }
    
    public static Person getPerson() {
        if (_instance == null) {
            _instance = new Person();
        }
        return _instance;
    }
    

    }[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题