Ich habe eine Datei mit möglicherweise mehrern Hundert Satzarten. Für jede Satzart gibt es eine Klasse zum Parsen. Ein Auswertprogramm soll nun die Möglichkeit bieten sich eine Satzart auszuwählen. Die anzuzeigenden Felder/Spalten können ebenfalls beim Aufruf bestimmt werden.
Ich will nun nicht für jeden Verarbeitungsschritt eine if-Abfrage machen sondern hoffe das eleganter hinzubekommen.
Ich stelle mir vor über ein switch (satzart) die Satzart-Klasse auszuwählen und einen "gemeinsamen" Namen zu verwenden. Bitte beachten: "gemeinsam" bedeutet nicht, dass verschiedene Objekte denselben Namen bekommen; es kann ein einem Ablauf nur eine Satzart selektiert werden also ist auch das Objekt eindeutig.
[Java]
switch (satzart) {
case 1: parser=new Satzart1(record); break;
case 2: parser=new Satzart2(record); break;
}
Iterator fname=brs.getIterator(0);
Iterator flength=brs.getIterator(2);
while (fname.hasNext()) { listLine.append(padLeft(parser.getField((String)fname.next()),Integer.parseInt((String)flength.next())));
}
System.out.println(listLine.toString());
[/Java]
So wie das hier aufgeschrieben ist funktioniert es leider aber nicht.
Man müsste parser als vom Typ Object oder einen anderen gemeinsame Super-Klasse der Satzarten definieren und dann irgendwie casten; mir fällt aber nicht ein wie.
mfg
Ulrich
Ich will nun nicht für jeden Verarbeitungsschritt eine if-Abfrage machen sondern hoffe das eleganter hinzubekommen.
Ich stelle mir vor über ein switch (satzart) die Satzart-Klasse auszuwählen und einen "gemeinsamen" Namen zu verwenden. Bitte beachten: "gemeinsam" bedeutet nicht, dass verschiedene Objekte denselben Namen bekommen; es kann ein einem Ablauf nur eine Satzart selektiert werden also ist auch das Objekt eindeutig.
[Java]
switch (satzart) {
case 1: parser=new Satzart1(record); break;
case 2: parser=new Satzart2(record); break;
}
Iterator fname=brs.getIterator(0);
Iterator flength=brs.getIterator(2);
while (fname.hasNext()) { listLine.append(padLeft(parser.getField((String)fname.next()),Integer.parseInt((String)flength.next())));
}
System.out.println(listLine.toString());
[/Java]
So wie das hier aufgeschrieben ist funktioniert es leider aber nicht.
Man müsste parser als vom Typ Object oder einen anderen gemeinsame Super-Klasse der Satzarten definieren und dann irgendwie casten; mir fällt aber nicht ein wie.
mfg
Ulrich