Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben

ReinhardD

Neues Mitglied
Hallo,

ich bin neu hier. Wenn meine Frage also in einem FAQ oder Tutorial erklärt wird, auf den Link rüberreichen.

Ich hab folgendes Problem:
Ich habe mehrere Klassen. Diese sind unterschiedlich Aufgebaut und werden aus XML-Dateien befüllt. Die Methode zum Befüllen will ich aber nur einmal schreiben. Jetzt habe ich folgende Idee:

Erstellen einer Basisklasse. Ob diese normal, abstrakt oder als Instanz anzulegen ist wäre dann meiner erste Frage. Diese Klasse sieht aktuell so aus:

Code:
public abstract class Datenhalter {
    public abstract void DatenSet(String name, String wert);
}

Die abgeleiteten Klassen werden dann so aufgebaut:
Code:
public class Antworten extends Datenhalter {
   ...
   public void DatenSet(String name, String wert){
      ...
   }
}

Benutzen will ich das dann so:
Code:
List<Antworten> al = new ArrayList<Antworten>();
XMLPullParserHandler parser = new XMLPullParserHandler( (List<Datenhalter>) al);   // Hier knallts!

Und XMLPullParserHandler ist so aufgebaut:
Code:
public class XMLPullParserHandler {
     List<Datenhalter> daten;
     public XMLPullParserHandler(List<Datenhalter> dt) {
        daten = dt;
    }
   ...
}

Ich hoffe es ist klar geworden was ich machen will.

Das klappt aber nicht.

Beim Instanzieren von XMLPullParserHandler bekomme ich die Fehlermeldung "error: incompatible types: List<Antworten> cannot be converted to List<Datenhalter>".

Irgend eine Idee was ich machen muss damit es klappt, oder eine andere Idee wie ich mein Problem lösen kann ohne XMLPullParserHandler mehrfach zu programmieren bzw. ohne mit großen switch-Anweisungen zu arbeiten?
 
Zuletzt bearbeitet:

michaels

Mitglied
Warum nicht einfach
Java:
List<Datenhalter> al = new ArrayList<>();
dann lustig neue Antwort-Objekte zur Liste hinzufügen und die Liste deinem XMLPullParserHandler übergeben. Sollte eigentlich klappen.
 

ReinhardD

Neues Mitglied
Erstmal danke, damit bekomme ich die Fehlermeldung weg.

Aber es klappt doch nicht weil ich einen Denkfehler gemacht habe.

Es gibt ja noch die Method XMLPullParserHandler.parse() darin passiert im Augenblick etwa folgendes.
Code:
public class XMLPullParserHandler {
   List<Antworten> antworten;
   private Antworten antwort;
   public ... parse(...) {
      antwort = new Antworten();
      ...
      antwort.setId(irgendeinWert);
      ...
      antworten.add(antwort);
   }
}

d.h. ich lege ein passendes Objekt, befülle es, und weise das der Liste zu. Später wird dann setId() mit DatenSet("id", irgendeinWert); ersetzt.

Datenset kann ich aber nicht instanzieren weil es abstract ist. Mach ich das abstract weg wird das DatenSet von Datenhalter aufgerufen, es soll aber das DatenSet von Antworten aufgerufen werden.

Ich muss also ein passendes Objekt anlegen, nur über den Namen. Und dann eine Methode aufrufen, auch nur über den Namen. Unter http://stackoverflow.com/a/160979 hab eich ein passendes Beispiel gefunden. Es geht also.

Aber allmählich wirds kompliziert. Es ist die Frage ob ich wirklich so kompliziert haben will, ich hab gehofft das es einfacher ist.

Ich werd wohl noch 'ne Nacht drüber Schlafen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
B Abstrakte Datentypen synchronisieren Allgemeine Java-Themen 11
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
S Klassen Abstrakte Klassen Allgemeine Java-Themen 5
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
C Abstrakte Klasse soll Methode aus Unterklasse aufrufen Allgemeine Java-Themen 3
J abstrakte Klassen, Konstanten und Konstruktor Allgemeine Java-Themen 9
S Wieso stehen in der API immer wieder abstrakte Methoden ? Allgemeine Java-Themen 7
P Abstrakte Elternklasse als Listener Allgemeine Java-Themen 6
L interface abstrakte klasse Allgemeine Java-Themen 21
I Interfaces und abstrakte Methoden Allgemeine Java-Themen 5
G Interface oder abstrakte Klasse Allgemeine Java-Themen 4
S Statische Methoden in abstrakte Klassen deklarieren? Allgemeine Java-Themen 17
G Abstrakte Fabrik für unterschiedliche Signaturen? Allgemeine Java-Themen 7
L Abstrakte Klasse: Member zwingend überschreibbar machen Allgemeine Java-Themen 2
MQue abstrakte Klasse Allgemeine Java-Themen 3
Q Schnittstelle/Abstrakte Klasse schreibt Annotation vor? Allgemeine Java-Themen 4
G Unterschied abstrakte Klasse und Interface? Allgemeine Java-Themen 3
S abstrakte klassen und packete Allgemeine Java-Themen 3
K Vererbung ohne Basisklasse zu kennen Allgemeine Java-Themen 20
P Reflection - Wie rufe ich die Felder einer Klasse in einer Methode der Basisklasse? Allgemeine Java-Themen 4
GilbertGrape Eine Art Basisklasse für Enums Allgemeine Java-Themen 9
0 Methode von Basisklasse aufrufen Allgemeine Java-Themen 10
P Methode der Basisklasse Allgemeine Java-Themen 7
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben