Ersatz fuer instanceof

Status
Nicht offen für weitere Antworten.

MiMij

Bekanntes Mitglied
Also ich hab nen Vector mit Objecten.
Menutyp1, Menutyp2 und Menutyp3
2 und 3 erben von 1
jetzt hab ich das mit instanceof geloest

Code:
Object o = menuTypen.elementAt(currentChooseNumber-1);
		if ( o instanceof MenuType2 ) {
			Display.getDisplay(main).setCurrent((MenuType2)menuTypen.elementAt(currentChooseNumber-1));
		} else if ( o instanceof MenuType1 ) {
			Display.getDisplay(main).setCurrent((MenuType1)menuTypen.elementAt(currentChooseNumber-1));
		}

Gibts da ne bessere Loesung? Weil ich mal gelesen hab, man sollte den Gebrauch von instanceof vermeiden.[/code]
 
G

Guest

Gast
Wenn Typ 2 und Typ 3 von Typ 1 erben und deine Methode (Display.getDisplay(main).setCurrent() anscheinend
Typ 1 akzeptiert, kannst du dir die Unterscheidung sparen.
Code:
Object o = menuTypen.elementAt(currentChooseNumber-1);
if ( o instanceof MenuType1 )
{
   Display.getDisplay(main).setCurrent((MenuType1)o);
}
MiMij hat gesagt.:
Weil ich mal gelesen hab, man sollte den Gebrauch von instanceof vermeiden.
In der Bildzeitung? :wink:
Es spricht nichts dagegen, vorhandene Sprachkonstrukte zu verwenden.
 

byte

Top Contributor
Definiere die gemeinsame Schnittstelle aller Menutypen in einem Interface. Dann brauchst Du nicht mehr zu unterscheiden, welcher Menutyp vorliegt sondern brauchst nur noch auf dem Interface arbeiten.

Ansonsten:
Alternative zu instanceof ist o.getClass() == Menutyp1 ;)
 

MiMij

Bekanntes Mitglied
@Gast
Ok, danke. Funktioniert. Irgendwie hatte ich das vorher probiert, aber das lief net richtig. Aber da war wohl noch nen anderer Fehler und darum lief es wohl net :D
 

Marco13

Top Contributor
Anonymous hat gesagt.:
MiMij hat gesagt.:
Weil ich mal gelesen hab, man sollte den Gebrauch von instanceof vermeiden.
In der Bildzeitung? :wink:
Es spricht nichts dagegen, vorhandene Sprachkonstrukte zu verwenden.

:autsch: Abgesehen davon, dass 'instacneof' immer eine Kapitulation vor der Objektorientierung ist, und die übermäßige Verwendeung ("um sich das Leben leichter zu machen") früher oder später dazu führt, dass die Programme nicht mehr so gut erweiterbar sind, wie sie sein sollten...

Um die Frage also zu beantworten: Der "Ersatz für instanceof" heißt "Polymorphie" :meld:
http://de.wikipedia.org/wiki/Polymorphie_(Programmierung)
 
G

Guest

Gast
Marco13 hat gesagt.:
...:autsch: Abgesehen davon, dass 'instacneof' immer eine Kapitulation vor der Objektorientierung ist, und die übermäßige Verwendeung ("um sich das Leben leichter zu machen") früher oder später dazu führt, dass die Programme nicht mehr so gut erweiterbar sind, wie sie sein sollten...
Ist ja gut.
wise_streicheln.gif
:lol:

Wenn man aber eine API verwendet, die einfach nur Object als Ergebnis liefert und die Anzahl möglicher Typen
beschränkt ist (und auch bleibt), macht es keinen Sinn eine Doktorarbeit daraus zu machen.
Ich habe schon oft Projekte erlebt, wo die Entwickler alles auf Teufel komm raus "Wiederverwendbar" machen
wollten, ohne daran zu denken, dass es für eine Erweiterung nicht vorgesehen ist und wenn, dann nicht auf
einem solch niedrigen Level. Das Ergebnis ist dann ein Irrwitziges Framework, bei dem keiner mehr durchblickt.
Recht hast du trotzdem. Wenn sich sowas vermeiden lässt, vermeidet man es einfach.
 

byte

Top Contributor
Es gibt halt die einen, die alles so zurechtschrauben dass es funktioniert. Und dann gibts halt noch die anderen, die es richtig machen. :roll: Alles eine Frage der Erfahrung.
 
B

Beni

Gast
byto hat gesagt.:
Es gibt halt die einen, die alles so zurechtschrauben dass es funktioniert. Und dann gibts halt noch die anderen, die es richtig machen. :roll: Alles eine Frage der Erfahrung.

:lol: :toll:
 

André Uhres

Top Contributor
Nur zur Information: "instanceof" ist keine Kapitulation, sondern ein Operator.
java.lang.Class#isInstance ist dagegen eine Methode,
genauso wie java.beans.Beans.isInstanceOf oder java.beans.Beans.getInstanceOf
 

Marco13

Top Contributor
Naja - ohne zu wissen, was du genau meintest - es gibt Stellen, an denen es "absichtlich" eingesetzt wird, eben gerade um nicht alles über Polymorphie lösen zu müssen. Aber das sind Spezialfälle. In "normalem" Code kann man jedes instanceof durch Polymorphie ersetzen. An einigen Stellen "sollte" man das auch nicht machen, weil es einfach ein krampfiger Overkill wäre. In diesem Fall aber vermutlich nicht...
 

André Uhres

Top Contributor
Marco13 hat gesagt.:
Naja - ohne zu wissen, was du genau meintest - es gibt Stellen, an denen es "absichtlich" eingesetzt wird, eben gerade um nicht alles über Polymorphie lösen zu müssen. Aber das sind Spezialfälle. In "normalem" Code kann man jedes instanceof durch Polymorphie ersetzen. An einigen Stellen "sollte" man das auch nicht machen, weil es einfach ein krampfiger Overkill wäre. In diesem Fall aber vermutlich nicht...
Sehr diplomatisch. Ich denke, so kann ich das unterschreiben :D
 

MiMij

Bekanntes Mitglied
Danke danke :D
Habs jetzt ohne instanceof geloest :D
In dem Vector ist ja eig alles vom typ menutyp1 weil 2 und 3 ja von 1 erben
also:
Code:
Display.getDisplay(main).setCurrent((MenuType1)menuTypen.elementAt(currentChooseNumber));
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
stroggi docx4j - Ersatz für getJaxbElement Allgemeine Java-Themen 2
B Ersatz für "stringIsCompilableUnit" Allgemeine Java-Themen 2
N entfernten rechner runterfahren => putty-ersatz Allgemeine Java-Themen 8
T Ersatz für Thread.sleep Allgemeine Java-Themen 8
B Ersatz für "replace" Allgemeine Java-Themen 4
ralfb1105 Classpath Directory fuer Properties File Allgemeine Java-Themen 2
S Library fuer Internet-Text-Daten-Quellen..? Allgemeine Java-Themen 8
S Access Restrictions in Eclipse auf Code beschraenken (und nicht fuer Comments) Allgemeine Java-Themen 2
S Generics: Fuer Set<T> ein T-Klassenobjekt erhalten? Allgemeine Java-Themen 3
J Sinnvolle Dateigroesse fuer PDAS-Transfer Allgemeine Java-Themen 2
G Software fuer Auktionshaus Filmundo.de aber wie? Allgemeine Java-Themen 2
R Signatur fuer Applets. Allgemeine Java-Themen 5
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
F Idee fuer Suchfeldmapping gesucht Allgemeine Java-Themen 10
F URI Problem bei Parametern fuer Outlook Allgemeine Java-Themen 4
E Was ist ein gutes Design fuer meine Programm? Allgemeine Java-Themen 3
G JML fuer Java 5 Allgemeine Java-Themen 19
M Oeffnen des Standartprogramms fuer XML Dateien aus Java Allgemeine Java-Themen 4
mihe7 equals und instanceOf pattern matching Allgemeine Java-Themen 9
M instanceof bei generischer Methode Allgemeine Java-Themen 3
E instanceof mit nicht öffentlichen Klassen Allgemeine Java-Themen 2
D instanceof oder was anderes? Allgemeine Java-Themen 12
J instanceof vermeiden und stattdessen dynamisch binden Allgemeine Java-Themen 6
M Vermeiden von instanceof Abfragen Allgemeine Java-Themen 3
S Kompositum Muster ohne Exception oder instanceof Operator Allgemeine Java-Themen 6
S instanceof liefert true, aber cast funktioniert nicht! Allgemeine Java-Themen 6
P instanceof mit variabler klasse Allgemeine Java-Themen 3
G Probleme mit ÜbergabeParameter für instanceof Allgemeine Java-Themen 3
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
T Generics und instanceof Allgemeine Java-Themen 10
Y instanceof unschön ! Allgemeine Java-Themen 6
J instanceof vermeiden Allgemeine Java-Themen 10
S instanceof und null Allgemeine Java-Themen 7
S instanceof mit genrics Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben