1.4-Software-Development-Principles

Generics

Bouw een Generieke CSVReader

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