Re: if else-Block ersetzen
- From: Michael Osipov <sgfan@xxxxxxx>
- Date: Tue, 05 Jun 2007 01:12:50 +0200
Lothar Kimmeringer wrote:
Michael Osipov wrote:
Über ein Vektor die Kommandos bereit zu halten und auf dessen Länge zu schalten halte ich für ineffizient.
Hat jemand eine schönere Idee oder ist das if else schon das Nonplusultra?
Es kommt ganz darauf an, was im if-Block an Anweisungen steht.
Eine Moeglichkeit waere die Verwendung von Reflection:
Statt if cmd.equals("putValue") usw. kann man folgendes
machen:
Class[] argClass = { String.class };
Method method = getClass().getMethod("CMD_" + cmd.toUpperCase(), argClass);
method.invoke(this, new Object[]{"dummy"});
D.h. jedes Kommando wird durch eine Methode
private void CMD_PUTVALUE(String dummyval)
repraesentiert. Die Signatur kann man natuerlich anpassen, muss
aber fuer alle Methoden die gleiche sein.
Alternativ kann man die Methoden auch schon im Vorfeld in eine
Map packen, so dass man nicht staendig NoSuchMethodExceptions
fangen muss, sondern einfach auf null ueberpruefen kann.
Macht aber erst ab einer gewissen Anzahl von Befehlen Sinn.
Man kann ja erst mal damit anfangen, alle if-Bloecke in
einzelne Methoden auszulagern und erst spaeter auf Reflection
umzusteigen:
if (cmd.equalsIgnoreCase("putValue")){
CMD_PUTVALUE("dummy");
}
else if (cmd.equalsIgnoreCase("getValue")){
CMD_GETVALUE("dummy");
}
Hallo Lothar,
habe mit sowas noch nie gearbeitet, aber wenn ich das so sehe, führt es zu einer totalen Zersplitterung mit einer Klassen mit 30 Methoden, die 3 Zeilen haben.
Das empfinde ich eher als kontraproduktiv. Der Inhalt des ifs soll schon erhalten bleiben, mir ist's nur wichtig die ifs wartbarer zu machen.
Meine Bedenken zu der Map habe ich bei Wanja schon geäußert!
danke,
bye
.
- Follow-Ups:
- Re: if else-Block ersetzen
- From: Bernd Eckenfels
- Re: if else-Block ersetzen
- References:
- if else-Block ersetzen
- From: Michael Osipov
- Re: if else-Block ersetzen
- From: Lothar Kimmeringer
- if else-Block ersetzen
- Prev by Date: Re: if else-Block ersetzen
- Next by Date: Re: ConcurrentModificationException bei drawImage?
- Previous by thread: Re: if else-Block ersetzen
- Next by thread: Re: if else-Block ersetzen
- Index(es):
Relevant Pages
|