Java implementieren Durchsuchbar, für jede Methode
Ich habe diese übung mit einem Algorithmus zu implementieren. Ich habe diese main:
public static void main(String[] args) {
Person a = new Person("Tony");
Person c = new Person("Luke");
Person o = new Person("Ann");
a.addFriends(c);
a.addFriends(o);
for(Person p: a.contacts())
System.out.println(p);
}
Wenn ich ersetzen "ein.Kontakte()" mit "ein" und verwenden Sie diese Klasse, der code funktioniert! Aber Wie kann ich das implementieren der for-each-Schleife mit "ein.Kontakte()"?? Dank
class Person implements Iterable<Person> {
private Set<Person> friends = new HashSet<Person>();
private String name;
public Person(String name){
this.name = name;
}
public void addFriends(Person o){
friends.add(o);
}
public String toString(){
return this.name;
}
@Override
public Iterator<Person> iterator() {
Iterator<Person> i = friends.iterator();
return i;
}
//Here the contacts method to implement!!
}
Es ist schwer zu verstehen, was Sie wollen. Selbst eine einfache getter wird sich so die Frage ist jetzt beschrieben.
P. S. Wenn
public Set<Person> contacts() { return friends; }
. Es wird lediglich die Rückkehr der Freunde set, und wird Ihre (Der Set
's) iterator. Keine Ahnung, ob das ist, was Sie wollen, obwohl.P. S. Wenn
name
nie geändert (wird ein Wert zugewiesen, nur im Konstruktor), meist ist es eine gute Praxis, um zu erklären, wie final
. (Es ist nicht im Zusammenhang mit Ihrer Frage in irgendeiner Weise, nur ein Tipp).
InformationsquelleAutor Peppe | 2012-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie ausführen möchten, eine Schleife für
Person
so den Platz neben:
sollte eine Auflistung vom TypPerson
.Können Sie entweder wählen Sie eine
List
oderSet
für diese und die Rückgabe der Sammlung voncontacts()
- Methode der KlassePerson
.In diesem Fall, da du hast
Set
so zurück.Collection<Person>
statt?Macht Sinn... aber seit der OP ist Sie verwirrt über das, was zurück... ich dachte, es einfach zu halten!!
gut, es funktioniert, vielen Dank
InformationsquelleAutor SiB
Lassen Sie Ihre
contacts()
Methode muss einen RückgabetypSet of Person
....So, jetzt die unten arbeiten...
InformationsquelleAutor Kumar Vivek Mitra
Tut dies mit einer Sammlung<T> ist nicht das gleiche wie mit Iterierbar<T>. Die Umsetzung der Iterierbar<T> erlaubt für lazy loading, während die Sammlung<T> basierte Implementierung erfordert, dass Sie füllen die ganze Sammlung vor der Rückgabe. Der richtige Umgang mit Ihrer Anforderung besteht in der Implementierung die folgende Methode innerhalb der Klasse " Person:
InformationsquelleAutor tbl