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 Web サイトの世話をしているときに、この例を見つけました。Getters、setter、equals、および toString を省略したと記載されています。このプログラムの書き方。このプログラムを実行して確認したいと思います。任意の提案をしてください。手伝う..

4

3 に答える 3

3

ゲッターとセッターは、「プライベート」変数 (= 定義されているクラス内でのみ表示される変数) をクラス外から取得するために使用されます。

例えば:

private String name;

次のようなゲッターがあります。

public String getName() {
    return name;
}

そして、このようなセッター:

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

(この変数をプロジェクト全体ではなくパッケージでのみ表示したい場合は、「保護」を使用できます)。

オブジェクトに関する情報を表示したい場合は、 toString() メソッドがここにあります。これは、デバッグの観点から役立つ可能性があります。

equals メソッドは、 Person タイプのオブジェクトと比較する方法を知るために使用されます (たとえば、ID のみ)。このリンクを見て、何が等しいかについての詳細を確認してください。

RonK が提案したように、equals を実装する場合は hashCode を必ず実装してください。これらは一緒になり、同じフィールド (コントラクトの一部) を使用する必要があります。

ルールは次の場合です。

objectA.equals(objectB) returns true

それから

objectA.hashCode() has to be equal to objectB.hashCode()
于 2010-08-20T18:28:08.983 に答える
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.

于 2010-08-20T18:28:23.767 に答える
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;
}
于 2010-08-20T18:29:44.393 に答える