Tijdens de OOP module heb je ergens in week drie jouw eigen CSVReader geschreven. De verantwoordelijkheid van die klasse is het aanbieden van methoden die het mogelijk maken om een bestand te lezen. Gebruikelijk zul die inhoud gebruiken om een lijst van specifieke objecten te maken.
Bedenk wat je kunt doen als je een generieke oplossing gebruikt.
classDiagram
class Creator~T~ {
T create(data:String[]);
}
<<interface>> Creator
class LambdaReader~T~ {
-???
+ObjectReader(filename:String, creator:Creator~T~);
+readObjects(): ArrayList~T~
}
<<final>> LambdaReader
Creator~T~ <-- LambdaReader
class PersonCreator {
Person create(data: String[]);
}
Creator <|-- PersonCreator
Person <--o PersonCreator
And you even get a piece of code for free:
public final class LambdaReader<T> extends CSVReader {
public LambdaReader(String filename, Creator<T> creator){}
public ArrayList<T> readObjects() {
ArrayList<T> result = new ArrayList<>();
while (readLine()) {
T temp = creator.create(getColumns());
result.add(temp);
}
return result;
}
}
Deze ObjectReader
kan de laatste versie van CSVReader zijn omdat de Creator
interface voorziet in het samenstellen van ieder mogelijk type.
Opdracht
CSVReader
klasse.
Creator
voor het verwerken van Persons.Creator
voor het verwerken van Food and drinks.