2010-08-20 19 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 
} 

En regardant le site DWR j'ai trouvé cet exemple. Il dit qu'ils ont omis Getters, setters, equals et toString. Comment écrire ceux pour ce programme. Je souhaite lancer ce programme et voir. Toutes les suggestions s'il vous plaît. Aidez-nous ...Qu'est-ce que Getters, setters, equals et toString pour ce programme. Comment l'écrire

+0

Ce n'est pas javascript, mais je vous vois que vous avez copié ceci à partir de: http://directwebremoting.org/dwr-demo/people/index.html – palswim

+0

oui correct j'ai pensé à exécuter ce programme. mais je ne sais pas comment l'exécuter. Pouvez-vous m'aider. – Gladiator

+0

Vous ne pouvez pas exécuter cette classe en tant que programme sans classe principale vide void. –

Répondre

3

Les Getters et les Setters sont utilisés pour récupérer vos variables "privées" (= variables visibles à l'intérieur de la classe, elles sont définies uniquement), depuis l'extérieur de la classe.

Par exemple:

private String name; 

aurait un getter comme celui-ci:

public String getName() { 
    return name; 
} 

Et un setter comme ceci:

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

(vous pouvez utiliser "protégé" si vous voulait seulement que cette variable soit visible dans le paquet, et non dans le projet entier).

La méthode toString() est ici si vous souhaitez afficher des informations sur votre objet, ce qui peut être utile du point de vue du débogage.

La méthode equals serait utilisée pour savoir comment vous souhaitez comparer les objets de type Person (par ID uniquement par exemple). Jetez un oeil à ce link pour avoir plus d'informations sur ce qui est égal. Comme RonK l'a suggéré, veillez à implémenter hashCode si vous implémentez des équations, qu'elles vont ensemble et qu'elles doivent utiliser les mêmes champs (partie du contrat).

La règle est que si:

objectA.equals(objectB) returns true 

puis

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

+1 pour expliquer ce que sont les getters et setters et pourquoi ils sont nécessaires – RonK

+0

Aussi, bien que non pertinent spécifiquement pour cette question, je voudrais ajouter une note sur l'implémentation de 'hashCode' comme suggéré dans une autre réponse – RonK

+0

@RonK: oui vous avez raison.J'ai seulement ajouté un lien où il y a l'explication sur equals et hashCode, car je n'étais pas sûr de la profondeur de la réponse. Je vais l'éditer pour que ce soit plus clair, merci :) –

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; 
    } 
} 

Ajouté hashCode ce qui est essentiel - surtout si vous l'utilisez dans un HashSet.

+0

Je ne peux pas comprendre les concepts de l'overide. S'il vous plaît dites-moi comment exécuter ce code et voir pour que je puisse le comprendre plus facilement. – Gladiator

+0

Vous pouvez supprimer '@ Overide'. Voir http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why –

2

pour chaque propriété en classe personne, vous devez définir 2 méthodes

par exemple id:

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

public int getId() { 
    return id; 
} 

et vous devez remplacer égaux et méthode hashCode pour mettre votre propre condition pour l'égalité

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; 
}