Switch / Case mit Strings

LL0rd

Erfahrenes Mitglied
Hallo Leute,

ich bin gerade dabei mein erstes Servlet zu schreiben und stehe bereits am Anfang vor einem Problem. In PHP habe ich vorher immer Fallunterscheidungen von $_POST und $_GET immer mit switch/case behandelt.

Gibt es in Java wirklich keine Möglichkeit switch mit einem String durchzuführen? Was würdet ihr denn als alternative machen?

a) Eine Map, die zu einem String ein Integer Wert rausgibt und dann mit diesem Int Wert mit switch arbeiten?
b) If ... Else
 
Gut fände ich Strings in switch auch, doch https://jdk7.dev.java.net/ implementiert es noch nicht. Und es ist auch erst in der Diskussion und keinesfalls sicher, dass es kommt.

Moment gibt es da unterschiedliche Lösungen. Eine ist natürlich eine if/else-Kaskade. Eine sehr "kreative" Lösung ist, über den Hash eines Strings zu gehen, wenn man Kollisionen verschmerzen kann:

Code:
switch ( s.hashCode() )
{
  case 79496 /* "Opi".hashCode() */ : System.out.println("Opi"); break;
  case 79403 /* "Omi".hashCode() */ : System.out.println("Omi"); break;
}

Am Beste finde ich eine Lösung mit Befehlsobjekten, also eine Map<String,Runnable> -- wobei Runnable nur eine naheliegende Schnittstelle ist --, um folgendes schreiben zu können.

Code:
Map<String, Runnable> map = new HashMap<String, Runnable>();
map.put( "Omi", new Runnable() {@Override public void run() { System.out.println("Omi");}} );
map.put( "Opi", new Runnable() {@Override public void run() { System.out.println("Opi");}} );

Runnable r = map.get( "Omi" );
if ( r != null )
  r.run();

So was habe ich bei mir in Programmen oft drin.

Grüße

Christian
 
Ich hab es mittlerweile etwas anders gelöst. Ich habe - genauso wie du - eine Map genommen und da zu Strings einfach eine Zahl definiert. Und anschließend führe ich einen Switch mit dem .get aus dem String aus.
 
Hallo,

switch mit String-hashCode's hatten wir auch schon :)
http://www.tutorials.de/forum/java/175243-gibt-es-switchs-die-mit-strings-umgehen-koennen.html

Ich würde hier eher mit nem enum Arbeiten:
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Thomas.Darimont
 * 
 */
public class SwitchWithStrings {

	enum CASE {
		OMI, OPI
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		CASE c = CASE.OPI;
		switch (c) {
		case OMI:
			System.out.println("OMI");
			break;
		case OPI:
			System.out.println("OPI");
			break;
		default:
			System.out.println("default");
		}
	}
}

Gruß Tom
 
Zurück