2010-08-20 15 views
1
public class People { 
// Code to create a random set of people omitted 

public Set getAllPeople() { 
    return people; 
} 

public void setPerson(Person person) { 
    if (person.getId() == -1) { 
     person.setId(getNextId()); 
    } 

    people.remove(person); 
    people.add(person); 
} 

public void deletePerson(Person person) { 
    people.remove(person); 
} 

private Set people = new HashSet(); 
} 

public class Person 
{ 
private int id; 
private String name; 
private String address; 
private float salary; 

// Getters, setters, equals and toString omitted 
} 

雖然照顧DWR網站,我發現這個例子。它說,他們省略了Getters,setters,equals和toString。如何編寫這個程序的。我希望運行這個程序並看看。任何建議請。幫助。這個程序的Getters,setters,equals和toString是什麼。如何寫它

+0

這不是javascript,但我看到你複製這個從:http://directwebremoting.org/dwr-demo/people/index.html – palswim 2010-08-20 18:25:58

+0

是的正確的我想運行這個程序。但我不知道如何運行它。你能幫我嗎。 – Gladiator 2010-08-20 18:32:53

+0

如果沒有靜態無效主類,則無法將此類作爲程序運行。 – 2010-08-20 18:36:31

回答

3

吸氣劑和吸附劑用於從外部檢索您的「私人」變量(=只在他們被定義的類內部可見的變量)。

例如:

private String name; 

會有這樣一個getter:

public String getName() { 
    return name; 
} 

而且像這樣的二傳:

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

(你可以使用 「保護」,如果你只希望這個變量在包中可見,而不是在整個項目中)。

toString()方法在這裏,如果你想顯示一些關於你的對象的信息,這從調試的角度來看可能是有用的。

equals方法將用於知道如何與Person類型的對象進行比較(僅限於ID)。 看看這個link有更多關於什麼是平等的信息。

正如RonK所建議的那樣,如果你確實實現了equals,它們一起並且必須使用相同的字段(合同的一部分),那麼一定要實現hashCode。

的規則是,如果:

objectA.equals(objectB) returns true 

然後

objectA.hashCode() has to be equal to objectB.hashCode() 
+1

+1解釋什麼是getter和setter以及爲什麼需要它 – RonK 2010-08-20 18:33:57

+0

另外,雖然這個問題沒有特別的意義,但我會添加一個關於實現'hashCode'的註釋,如另一個答案 – RonK 2010-08-20 18:35:42

+0

@RonK:是的,你是對的。我只添加了一個鏈接,其中有關於equals和hashCode的解釋,因爲我不確定我應該在答案中留下多深。我會編輯它,以便它更清晰,謝謝:) – 2010-08-20 18:39:29

2
public class Person 
{ 
    //Id should be unique 
    private int id; 
    private String name; 
    private String address; 
    private float salary; 

    public Person(int id, String name, String address, float salary) 
    { 
     this.id = id; 
     this.name = name; //Maybe check for null 
     this.address = address; //Maybe check for null 
     this.salary = salary; //Maybe check for > 0 
    } 

    public int getId() 
    { 
     return id; 
    } 

    //No setID() - do you want that? you properly shouldn't 

    public String getName() 
    { 
     return name; 
    } 

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

    public String getAddress() 
    { 
     return address; 
    } 

    public void setAddress(String address) 
    { 
     this.address = address; //Maybe check for null 
    } 

    public float getSalary() 
    { 
     return salary; 
    } 

    public setSalary(float salary) 
    { 
     this.salary = salary; 
    } 

    //A person is equal if they have the same ID 
    @Override 
    public boolean equals(Object obj) 
    { 
     if (this == obj) return true; 
     if (obj == null) return false; 
     if (getClass() != obj.getClass()) return false; 

     Person person = (Person)obj; 

     return person.id == id; 
    } 

    @Override 
    public int hashCode() 
    { 
     return id; 
    } 

    //Just returns the name but you could return more details 
    @Override 
    public String toString() 
    { 
     return name; 
    } 
} 

新增hashCode這是至關重要的 - 特別是如果你在一個HashSet使用它。

+0

我無法理解上面的概念。請告訴我如何運行這段代碼並看看,以便我更容易理解它。 – Gladiator 2010-08-20 18:49:15

+0

您可以刪除'@ Overide'。請參閱http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why – 2010-08-20 19:10:41

2

在Person類需要定義2種方法

例如ID每個屬性:

public void setId(int id) { 
    this.id = id; 
} 

public int getId() { 
    return id; 
} 

,你需要重寫equals和hashCode方法把自己的條件平等

public boolean equals(Object that) { 
    if (that == null) { 
     return false; 
    } 
    if (!(that instanceof Person)) { 
     return false; 
    } 
    return this.id == ((Person) that).id; 
} 

public int hashCode() { 
    return id * 17; 
}