2017-12-01 2 views
-2

Ich habe einen Schalter Fall, die verschiedene Methoden und ihre Konfigurationen zurückgeben. Ist es möglich, es zurückzugeben, nachdem es alle Schalterfälle durchlaufen hat.Optimierung der Return-Anweisung in Switch-Fällen in Java

switch (method.getindex()) 
    { 
     case xxx: 
     result= new method(new anothermethod1(something.getindex(0), something.getindex(1)), some varibale); 
     break; 
     case yyy: 
     result= new method(new anothermethod2(something.getindex(0), some varibale); 
     break; 
    } 
    retrun result; 

Dies muss geändert werden, um das Ergebnis zurückzugeben, nachdem es aus dem Fall ausbricht und das Ergebnis je nach dem ausgewählten Fall zurückgeben soll. sollte unter

switch (method.getindex()) 
    { 
     case xxx: 
     break; 
     case yyy: 
     break; 
    } 
    return result = new method(new should take the method automatically when it enters into the corresponding case , some variable); 
+0

einfach "zurück" innerhalb der 'case' Blöcke? – luk2302

+0

Ich bin ein wenig verwirrt, was Sie fragen. Dieser Code sieht aus, als sollte es gut funktionieren? Solange aa Sie eine Variable vor der switch-Anweisung initialisieren ... –

+0

Ich brauche sie in der endgültigen return-Anweisung, da ich die gleiche Methode in beiden Fällen aber verschiedene Parameter zurückgeben. – Emoji

Antwort

0

wie diese erhalten Sie diese verschiedenen return Anweisungen innerhalb jedes case setzen können und auf diese Weise brauchen Sie nicht break Schlüsselwort am Ende jedes case zu verwenden.

+0

lesen Sie die Frage richtig – Emoji

0

In jedem Fall haben einen anderen Satz von Variablen, das heißt

case xxx: 
method1 = new AnotherMethod1(Something.getIndex()); 
var1 = someVariable; 

Dann außen, wenn die switch-Anweisung:

return new Method(method1, var1); 

Hoffentlich hilft?

+0

Das Problem ist, die Methoden sofort in der Rückkehr, aber nicht die Variable – Emoji

3

Wenn ich das richtig verstanden, Sie möchten etw wie dies tun:

<some type of switch result> switch_result; 
switch (method.getindex()) 
{ 
    case xxx: 
     switch_result = new anothermethod1(something.getindex(0), something.getindex(1)); 
     break; 
    case yyy: 
     switch_result = new anothermethod2(something.getindex(0)); 
     break; 
} 
retrun new method(switch_result, some varibale); 

Ist das richtig?

Die Frage ist, was für < irgendeine Art von Schalter Ergebnis>. Sie benötigen einen Typ auszuwählen, die entweder:

  1. eine Superklasse von anothermethod1 und anothermethod2
  2. eine Schnittstelle, die sowohl von anothermethod1 und anothermethod2

Es gibt eine zusätzliche Anforderung umgesetzt wird. "Methode" muss einen Konstruktor haben, der < irgendeine Art von Schalterergebnis> nimmt. Sonst wird es nicht funktionieren.

Denken Sie auch daran, dass, wenn eine „Methode“ Klassenkonstruktoren für alle drei Arten haben (anothermethod1, anothermethod2 und < irgendeine Art von Schalter Ergebnis>) dann in dem obigen Code der Version für < irgendeine Art von Schalter Ergebnis> wird heißen.

Hier ist ein Beispiel:

public class C { 
    static class A {} 
    static class B {} 
    C(A a, int x) { System.out.println("A " + x); } 
    C(B b, int x) { System.out.println("B " + x); } 
    C(Object o, int x) { System.out.println("Object " + x); } 

    public static void main(String...args) { 
    Object switch_result = null; 
    switch (args.length) { 
     case 0: 
     switch_result = new A(); 
     break; 
     case 1: 
     switch_result = new B(); 
     break; 
    } 
    C result = new C(switch_result, 42); 
    } 
} 

Egal, wie viele Argumente, die Sie zur Haupt passieren es wird print „Objekt 42“.

+0

ändern Der obige Block ist, was ich will, aber ich habe nicht verstanden, wie man sich nähert, können Sie ein Beispiel Code – Emoji

+0

schreiben Wenn Sie möchten Ihre neue Methode, um die Methode automatisch zu verwenden, warum definieren Sie nicht die Methode außerhalb von Switch und basierend auf der Ausgabe der neuen Methode können Sie die Methode1 oder Methode2 mit Switch Case ?? – Dora

+0

Kommentar hat zu kleine Grenze, also habe ich die Antwort mit dem Code aktualisiert. – haaawk