else if VS. Switch

BastianW

Mitglied
Hallo zusammen... ich habe hier folgendes Konstrukt:


Code:
    	if (partnerMessage.equalsIgnoreCase("thanks") || partnerMessage.equalsIgnoreCase("thank you")) 
    	{
            return "You're welcome!";
        }
    	else if (partnerMessage.equalsIgnoreCase("hello") || partnerMessage.equalsIgnoreCase("hi")) 
    	{
            return "Hello there!";
        }
    	else if (partnerMessage.equalsIgnoreCase("exit") || partnerMessage.equalsIgnoreCase("bye")) 
    	{
            return "ByeBye...";
        }

das ganze würde ich nun gerne in ein Switch elemente umbauen. Es würde warscheinlich noch mehr solcher "if" abfragen zu dem ganzen oben hinzukommen...

Frage, macht das überhaupt sinn das in switch umzubauen? Oder kann ich das Switch element evtl. gar nicht mit String elementen verwenden? :-)
 
Genau so sieht es aus. In Java kannst du (noch) nicht Strings in Switch-Bedingungen verwenden. Wobei ich gelesen habe, dass das mit Java 7 kommen soll.

Ich glaube üblicherweise arbeitet man hier mit so genannten Hash-Werten, aber dazu weiß ich zu wenig.
 
hm... ok dann habe ich das doch korrekt gesehen...

Sehr schade... weil dann wird dieses "if then else" konstukt voll riesig :-(
 
Mach das doch mit ner HashMap oder so wo du reinschreibst
Java:
map.put("thanks".toUpperCase(),"you're welcome");
map.put("hello".toUpperCase(),"Hello there!");
map.put("exit".toUpperCase(),"ByeBye...");

return map.get(partnerMessage.toUpperCase());
 
hm, das mit dem Hashmap sieht auch sehr interessant aus... Das könnte ich dann sogar so bauen das es aus einem Textfile kommt und wäre da sicherlich noch flexibler :)
 
Hallo,

wenn du statt Strings richtige Objekte verwendest, dann kannst du die switch/if-else Geschichte umgehen, indem du Polymorphismus ausnutzt:
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author thomas.darimont
 * 
 */
public class PolymorphismExample {
    /**
     * @param args
     */
    public static void main(String[] args) {
        PartnerMessage partnerMessage = getRandomPartnerMessage();
        System.out.println(partnerMessage.getMessage() + " -> "
                + partnerMessage.getAnswer());
    }

    private static PartnerMessage getRandomPartnerMessage() {
        return new PartnerMessage[] { new ThanksMessage("thanks"),
                new HelloMessage("hello"), new ExitMessage("exit") }[(int) (Math
                .random() * 3)];
    }

    static class PartnerMessage {
        String message;
        String answer;

        public PartnerMessage(String message) {
            this.message = message;
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(String answer) {
            this.message = answer;
        }

        public String getAnswer() {
            return answer;
        }

        public void setAnswer(String answer) {
            this.answer = answer;
        }
    }

    static class ThanksMessage extends PartnerMessage {
        public ThanksMessage(String message) {
            super(message);
            super.answer = "you're welcome";
        }
    }

    static class HelloMessage extends PartnerMessage {
        public HelloMessage(String message) {
            super(message);
            super.answer = "hello there";
        }
    }

    static class ExitMessage extends PartnerMessage {
        public ExitMessage(String message) {
            super(message);
            super.answer = "bye bye...";
        }
    }
}

Das erlaubt dir dann auch später neue Message-Typen ins System zu bringen ohne irgendwelche stwich/if-else Statements anfassen zu müssen.

Gruß Tom
 
Zurück