Hi
folgende Problematik: Es gibt die Klassen "Fahrzeug" und die Subklassen "Auto" und "Fahrrad". Ich habe eine Liste vom Typ "Fahrzeug". Jetzt möchte ich wissen, ob der Subtyp eines enthaltenen Elements z.B. "Auto" ist. Geht das mit dem instanceof-Operator? Z.B. in folgender Weise:
List<Fahrzeug> liste;
Iterator <Fahrzeug> it = liste.iterator();
while (it.hasNext()) {
Fahrzeug f = it.next();
if (f instanceof Auto) {
...
}
}
Die Frage dafür ist jetzt: Vergleicht instanceof mit dem statischen oder dynamischen Typ von f? Wenn das so nicht geht, wie kann man das anders lösen?
Danke!
[Info 2] instanceof - Problem
- M_A_D
- Beiträge: 196
- Registriert: 13.10.2009 12:57
- Name: Mähäääd!
- Geschlecht: weiblich
- Studienrichtung: Elektrotechnik
- Matrikel: 2009
- Angestrebter Abschluss: Doktor
Re: [Info 2] instanceof - Problem
müsste so gehen
Wer von euch Hässlichen meint ich sei oberflächlich?
Re: [Info 2] instanceof - Problem
Ja, das geht. Wobei
f instanceof Fahrzeug
auch immer wahr ist.
Anzumerken wäre noch, dass instanceof-Abfragen meist als schlechter Programmierstil angesehen werden. Der Grund ist einfach, dass eine instanceof-Abfrage vergleichsweise sehr viel Rechenzeit in Anspruch nimmt. Um das zu umgehen wäre ein ENUM gut geeignet, das einfach speichert um welche Klasse es sich jetzt handelt.
Wenn es dir nicht auf Geschwindigkeit ankommt, dann kannst du es mit dem instanceof-Operator so gut lösen.
f instanceof Fahrzeug
auch immer wahr ist.
Anzumerken wäre noch, dass instanceof-Abfragen meist als schlechter Programmierstil angesehen werden. Der Grund ist einfach, dass eine instanceof-Abfrage vergleichsweise sehr viel Rechenzeit in Anspruch nimmt. Um das zu umgehen wäre ein ENUM gut geeignet, das einfach speichert um welche Klasse es sich jetzt handelt.
Wenn es dir nicht auf Geschwindigkeit ankommt, dann kannst du es mit dem instanceof-Operator so gut lösen.
- rayman
- Beiträge: 76
- Registriert: 16.01.2006 20:06
- Name: Robert Rasche
- Geschlecht: männlich
- Studienrichtung: Informationssystemtechnik
- Matrikel: 2007
- Angestrebter Abschluss: Dipl-Ing.
Re: [Info 2] instanceof - Problem
Das stimmt nur teilweise. instanceof ist zwar schlechter Programmierstil, aber immer noch besser als eben dieses enum, was die Klassenstruktur wiederspiegelt. Die Verluste von instanceof sind auch nicht so krass, dass man sich Gedanken machen müsste.Alex hat geschrieben:Anzumerken wäre noch, dass instanceof-Abfragen meist als schlechter Programmierstil angesehen werden. Der Grund ist einfach, dass eine instanceof-Abfrage vergleichsweise sehr viel Rechenzeit in Anspruch nimmt. Um das zu umgehen wäre ein ENUM gut geeignet, das einfach speichert um welche Klasse es sich jetzt handelt.
Wenn man ein enum nehmen will, brauch man wahrscheinlich nichtmal zwei getrennte klassen.
Der saubere Weg wäre, das Verhalten, dass durch die if-Unterscheidung aufgetrennt wird durch eine separate Methode in der entsprechenden Klasse zu implementieren.
Code: Alles auswählen
class Fahrzeug {
void do() { /* nix */ }
}
class Auto extends Fahrzeug {
void do() { ... }
}
...
List<Fahrzeug> liste;
Iterator <Fahrzeug> it = liste.iterator();
while (it.hasNext()) {
Fahrzeug f = it.next();
f.do();
}
}
Es spielt keine Rolle, ob etwas egal, belanglos oder unerheblich ist.