Speichern verschiedener Arten von Elementen in einer Liste in Java

8

Ich versuche einen allgemeinen Tabellenlader zu entwickeln, dessen Schema zur Laufzeit bekannt ist. Dies erfordert eine Klasse, die eine Liste verschiedener Elementtypen enthält und verschiedene Methoden zum Abrufen und Festlegen unterstützt, z. B. getInt(int index) , asString(int index) , asStringList(int index) . Die Arten von Elementen, die ich in Betracht ziehe, sind Integer , Double , String und List<Integer> , List<Double> und List<String> . Der tatsächliche Typ jedes Elements ist zur Laufzeit bekannt, und ich werde sie in einer Liste speichern, die das Schema für die weitere Verarbeitung beschreibt.

Meine Frage ist: Soll ich eine solche Liste von Elementen in List<Object> oder List<? extends Object> speichern? Oder gibt es einen besseren Weg, eine solche Klasse zu implementieren?

    
keelar 14.06.2013, 21:33
quelle

2 Antworten

11

Da der gemeinsame Vorgänger Ihrer Klassen Object ist, und weil List<? extends Object> die Dinge nicht sauberer macht (schließlich erstreckt sich alles um Object ), sieht es so aus, als wäre List<Object> eine gute Wahl.

Eine solche Liste wäre jedoch ein gemischter Sack: Sie müssten den Laufzeittyp des Objekts darin überprüfen und daraus Entscheidungen treffen. Das ist definitiv keine gute Sache.

Eine bessere Alternative wäre das Erstellen einer eigenen Klasse, die Operationen für Elemente der Liste auf einheitliche Weise implementiert, und eine Unterklasse für jeden Subtyp, der diese Operationen anders implementiert. Auf diese Weise können Sie die Liste einheitlich behandeln und die Differenzierung pro Objekt in Ihre Wrapper verschieben.

%Vor%

Nun können Sie eine Liste von ItemWrapper -Objekten und calculateSomething erstellen, ohne deren Typ zu prüfen:

%Vor%     
dasblinkenlight 14.06.2013, 21:40
quelle
4

Sie sollten List<Object> verwenden, oder welche Superklasse auch immer am besten passt. Ich habe einmal eine ähnliche Frage gestellt, die ein paar sehr gute Antworten gesammelt hat, die viele relevante Informationen für Sie enthält. Ich würde es ausprobieren . Im Grunde kommt alles auf PECS - Produzent erweitert, Consumer Super .

    
oligofren 14.06.2013 21:38
quelle

Tags und Links