Что такое Getters, setters, equals и toString для этой программы.Как это написать - PullRequest
1 голос
/ 20 августа 2010
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.Как написать те для этой программы.Я хочу запустить эту программу и посмотреть.Любые предложения, пожалуйста.Помогите ..

Ответы [ 3 ]

3 голосов
/ 20 августа 2010

Методы получения и установки используются для извлечения ваших «закрытых» переменных (= переменных, видимых внутри класса, для которого они определены), вне класса.

Например:

private String name;

будет иметь такой геттер:

public String getName() {
    return name;
}

и такой сеттер:

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

(вы можете использовать «защищенный», если хотите, чтобы эта переменная была видна только впакет, а не во всем проекте).

метод toString () здесь, если вы хотите отобразить некоторую информацию о вашем объекте, которая может быть полезна с точки зрения отладки.

Метод equals будет использоваться, чтобы узнать, как вы хотите сравнивать объекты типа Person (например, только по идентификаторам).Взгляните на эту ссылку , чтобы получить больше информации о равенстве.

Как и предполагал RonK, обязательно реализуйте hashCode, если вы реализуете equals, они идут вместе и должны использоватьте же поля (часть контракта).

Правило таково: если:

objectA.equals(objectB) returns true

, то

objectA.hashCode() has to be equal to objectB.hashCode()
2 голосов
/ 20 августа 2010

для каждого свойства в классе 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;
}
2 голосов
/ 20 августа 2010
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.

...