Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe die letzten Tage mal paar alte Challenges angeschaut und bin auf eine Java-Challenge gestoßen, wo mir eine Frage aufkam.
In der Challenge geht es darum zwei verschiedene CSV-Dateien einzulesen und die Daten bisschen zu manipulieren. Nicht so schwierig. Fokus liegt hierbei auf robustes, wartungsfreundliches und modulares Programmieren.
Nun gibt es einen Hinweis den ich gerne besprochen hätte: Design intuitive interfaces for the components in a way that each component can be replaced. For example in the next evolution step of your solution you might need to support other data formats like JSON files or even Web services. The Reader for the CSV-files in your example could be replaced with a reader that implements the same interface but reads JSON-files.
Ich hätte jetzt eine Klasse CSVReader erstellt mit den benötigten Methoden. Und dann in der main Klasse ein Objekt dieses CSVReader erstellt, der die CSVDaten bereithält.
Und für JSON oder andere Formate hätte ich immer eine eigene Klasse erstellt.
So ist das hier gemeint oder? Leider sind meine Java Skills etwas eingerostet und ich bin mir nicht ganz sicher.
Vorallem irritiert mich das Wort interface. Meinen sie die deutsche Übersetzung Schnittstelle oder das Java Interface?
Wenn das erstere zutrifft ist meine Lösung mit den verschiedenen Klassen zutreffend.
Oder kann man das mit den ganzen Formaten(CSV, JSON, etc.) noch eleganter lösen?
import java.util.List;
public interface Reader<T> {
List<T> load();
}
public class CSVReader implements Reader<T> {
// implementierung von CSVReader
}
public class JSONReader implements Reader<T> {
// implementierung von JSINReader
}
public class Main implements Reader<T>{
Reader reader = CSVReader(); // oder JSONReader();
reader.load();
}
Was mich gerade an deinem Beispiel irritiert ist das generische T? Was für ein Wert käme da bei einer CSV-Datei rein?
Wenn meine CSV-Datei Kontakdaten enthält und ich eine Klasse Contact habe, dann würde es so aussehen Reader<Contact> ?
Du willst ja irgendwelche Daten lesen und schreiben. Also wenn Du eine Klasse Address hast, dann willst du evtl. eine Liste von Address Instanzen laden. Das wäre dann ein Reader<Address>.
public class CSVReader implements Reader<T>
Das dürfte so nicht übersetzen. Entweder die Klasse CSVReader ist auch generisch, dann wäre es ein public class CSVReader<T> implements Reader<T>
Oder du hast einen Reader, der halt nur Address Instanzen lesen kann: public class CSVAddressReader implements Reader<Address>
public class Main implements Reader<T>
Die Klasse Main ist ja nur eine Klasse, die so einen Reader nutzt. Muss diesen also nicht ableiten.