| 

.NET C# Java Javascript Exception

2
Hallo in die Runde,

ich habe für eine Uni Aufgabe Musterlösung vom Prof bekommen, was ich nicht so richtig nachvollziehen kann. die Klasse ArrayListAddresDataBookStore implementiert das Interface AddresDataBookStore und dazu schreibt er noch ne toString Methode. der Code ist unten:
package xml;

import java.util.*;

public class ArrayListAddressBookDataStore implements AddressBookDataStore {

private ArrayList<Person> dataStore;

/**
* Erzeugt ein neues Exemplar dieser Klasse.
*/
public ArrayListAddressBookDataStore() {
dataStore = new ArrayList<Person>();
}

/*
* (non-Javadoc)
*
* @see de.mpaap.addressbook.xml.AddressBookDataStore#addPerson(de.mpaap.addressbook.xml.Person)
*/
@Override
public void addPerson(Person p) {
dataStore.add(p);
}

/*
* (non-Javadoc)
*
* @see de.mpaap.addressbook.xml.AddressBookDataStore#getPersons(java.lang.String)
*/
@Override
public Person[] getPersons(String name) {
ArrayList<Person> foundPersons = new ArrayList<Person>();
for (Person person : dataStore) {
if (name.equals(person.getName())) {
foundPersons.add(person);
}
}
return foundPersons.toArray(new Person[foundPersons.size()]);
}

/*
* (non-Javadoc)
*
* @see de.mpaap.addressbook.xml.AddressBookDataStore#remove(de.mpaap.addressbook.xml.Person)
*/
@Override
public void remove(Person p) {
for (int i = 0; i < dataStore.size(); i++) {
if (dataStore.get(i) == p) {
dataStore.remove(i);
}
}
}

/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("Size: ").append(dataStore.size());
for (Person person : dataStore) {
sb.append("\n").append(person.toString());
}
return sb.toString();
}

/*
* (non-Javadoc)
*
* @see de.mpaap.addressbook.xml.AddressBookDataStore#contains(java.lang.String)
*/
@Override
public boolean contains(String name) {
return dataStore.contains(new Person("", name));
}

/*
* (non-Javadoc)
*
* @see de.mpaap.addressbook.xml.AddressBookDataStore#getPersonCollection()
*/
@Override
public Collection<Person> getPersonCollection() {
return Collections.unmodifiableCollection(dataStore);
}
}



Ich verstehe die rückgabe zeilen der der Methoden "getPersons" und "contains" überhaupt gar nicht. woher kommt da "new! z.b.

danke für euer Feedback.


Grüße,
Mel
10.04.2014
mel_forgotit 23 4
2 Antworten
2

  • getPersons: erzeugt eine neue ArrayList, fügt dieser alle Person-Objekte hinzu, die es zum gegebenem Namen im dataStore findet, und wandelt am Ende den Inhalt der Liste in ein Person-Array um. Die parameterlose Variante von toArray gibt ein Object[] zurück. Um ein korrekt typisiertes Array zu bekommen, muß man eine Instanz des gewünschten Array-Typs übergeben. Die toArray-Implementierung erzeugt dann ein Array des selben Typs und von passender Größe für die Rückgabe - es sei denn, das übergebene Array ist schon groß genug. Und weil letzteres einen Tick effizienter ist, erzeugt der Muster-Code mit "new Person[...]" eben gleich ein Person-Array von passender Größe.
  • contains: dataStore ist eine ArrayList, und deren contains-Methode prüft das Enthaltensein eines Objektes in der ArrayList über die equals-Methode des Objektes, d.h. sie liefert true, wenn die Liste ein Objekt enthält, das bei Vergleich mit dem übergebenen Objekt mittels equals() true zurückliefert. Offenbar wird in der Aufgabe eine Person-Klasse verwendet, deren equals-Methode so implementiert ist, dass der Vergleich mit einem ad-hoc wie im Mustercode erzeugten Vergleichs-Objekt genau das gewünschte Ergebnis liefert. Oder anders ausgedrückt: contains soll offenbar (ich muß vermuten, weil die Javadoc nicht mit ddabei steht) die Info liefern, ob ein Person-Objekt mit bestimmten Eigenschaften im dataStore enthalten ist. 'new Person("", name)' erzeugt ein Person-Objekt, das genau diese Eigenschaften repräsentiert, und Person.equals() ist offenbar so implementiert, dass es true liefert, wenn zwei Person-Objekte hinsichtlich dieser Eigenschaften übereinstimmen.
10.04.2014
Matthias Hlawatsch 13,2k 4 9
0
Das ist der Konstruktor in der Klasse Person, kuck dir die Klasse einmal an, da müsste was drinstehen wie:

public Person (String irgendwas, String name) {...}


Was das Umschaufeln in der getPersons angeht, dort erstelle ich lauter Personen in einem Array von Personen mit der Größe von der Liste mit gefundenen Personen.
10.04.2014
Lord_Pinhead 778 8

Stelle deine Java-Frage jetzt!