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条)

报告相同问题?