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。如何为这个程序编写这些。我想运行这个程序看看。请有任何建议。帮帮忙。。

4

3 回答 3

3

Getter 和 Setter 用于从类外部检索您的“私有”变量(= 仅在类内部可见的变量,它们被定义)。

例如:

private String name;

会有这样的吸气剂:

public String getName() {
    return name;
}

像这样的二传手:

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

(如果您只希望此变量在包中可见,而不是在整个项目中可见,则可以使用“受保护”)。

如果你想显示关于你的对象的一些信息,那么 toString() 方法就在这里,从调试的角度来看,这可能很有用。

equals 方法将用于了解您希望如何与 Person 类型的对象进行比较(例如仅通过 ids)。查看此链接以获取有关等于的更多信息。

正如 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 个方法

例如身份证:

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 回答