Comment ajouter un objet dans un autre Objet
J'ai deux classes. Une(Personne) pour les getters et les setters, et l'autre(les Gens) pour calculer les données. Qu'est-ce que ma situation est, je reçois les données de la DB à l'aide de ResultSet
, puis créé un Objet personne pour stocker les données de ligne. Puis j'ai créé les gens de l'Objet pour stocker toutes les personnes.
Chaque Objet créé en tant qu'ENSEMBLE.
while(rs.next())
{
Set<People> people = new HashSet<people>();
Person person = new Person();
String name = rs.getString(2);
person.setName(name);
int id = rs.getInt(1);
person.setId(id);
String dept = rs.getString(4);
person.setDept(dept);
int age = rs.getInt(3);
person.setAge(age);
people.add(person);
}
return people;
Maintenant, le problème, c'est la dernière ligne dans la Boucle While people.add(person);
Il dit
La méthode add(les Gens) dans le type de Jeu n'est pas applicable pour les arguments (Personne)
Comment puis-je résoudre ce problème?
Grâce.
OriginalL'auteur | 2010-08-23
Vous devez vous connecter pour publier un commentaire.
Mon understandig à partir de votre conception est que vous avez un Gens a beaucoup de Personne relation, de sorte que le
People
classe contient une collection dePerson
objets. Alors je m'attend à quelque chose comme ceci:Dans votre base de données connexes code que vous n'avez pas besoin de créer un autre, parce que
People
a déjà celui dont vous avez besoin:OriginalL'auteur Andreas_D
Je ne comprends pas pourquoi vous voulez les 2 classes à la première place. Vous cand ont Personne à mettre en œuvre le calcul de la partie. Mais, néanmoins, ce que vous pourriez faire:
et puis:
Correct. Vous pourriez avoir pensé, bien 🙂
OriginalL'auteur drstupid
En fonction de ce que vous essayez de le faire je le sens, vous devez convertir votre Personne pour les Gens de la classe avant de l'ajouter à l'ensemble. Votre les Gens de la classe dispose d'un constructeur qui prend une Personne comme argument et copie les champs obligatoires de la Personne à la les Gens. Ici votre code à ajouter à l'apparence comme
people.add(new People(person));
Lorsque vous déclarez
Set<People> people = new HashSet<People>();
ce que cela signifie, c'est que ce jeu est censé contenir des objets de type " les Gens c'est à dire des cas de Personnes ou d'instances de sous-classes de Personnes. Si les Gens n'est qu'une interface, l'ensemble peut contenir n'importe quel objet qui implémente l'interface.OriginalL'auteur Gopi
Je comprends
Person
est une structure de données (bean-like, avec des getters et setters), etPeople
doit contenir tous lesPerson
objets de la base de données et effectuer des calculs sur eux.Si cela est vrai, tout d'abord, vous ne pouvez pas déclarer de personnes à l'intérieur de la boucle (car un nouveau
People
objet sera créé pour chaquePerson
, et vous ne voulez pas que, d'après ce que je comprends).Deuxième,
People
doit être en mesure de contenir les objets de la Personne. Donc, il devrait au moins être composé d'unSet
dePerson
objets. Vous pouvez ajouter plus de fonctionnalités, comme vous s'il vous plaît. Donc, essayez quelque chose comme ceci:Et de l'utiliser comme ceci, comme l'affiche précédente a suggéré:
People
la mise en œuvre de laSet
interface. Ensuite, vous pouvez l'utiliser comme un Jeu et ne pas avoir à forcer l'utilisateur à faire quelque chose commepeople.getPersons().add(person);
. Et si fournir une lecture de l'ensemble, de ne pas retourner à l'interne, de retour d'unCollections.unmodifiableSet(persons)
, de sorte que personne ne peut changer le fonctionnement interne.Merci pour votre réponse. Il m'a aidé. Mais j'ai une autre question. Dois-je déclarer un jeu pour la Classe Personne. Comme, Set<Personne> personnes = new HashSet<Personne>(); .
OriginalL'auteur double-m
Je ne pense pas que
Set<People> people = new HashSet<people>();
doit être écrit dans la boucle.Ya, je viens de là... ce n'est pas réellement déclarée.
OriginalL'auteur 卢声远 Shengyuan Lu
OriginalL'auteur Shivam Thacker