2016-04-13 8 views
0

この構文が可能です:= 1Java構文:変数をswitch caseにする? Javaで

スイッチケースのための同様の構文がありますので

int a = 1; 
int i = 0; 
i = a == 1 ? 5 : 8; 

だからこのケースでは、私は5でしょうか?このような例

int a = 1; 
int i = 0; 
i = switch (a) { 
    case 1: 5; break; 
    case 2: 8; break; 
} 

私も= 1ので、5になるように?

答えて

0

悲しいことに、この構文はサポートされていません。しかし、あなたは、Java 8と、このような動作をシミュレートすることができます:

import java.util.Optional; 
import java.util.function.Supplier; 

public class Switch { 

    @SafeVarargs 
    public static <T, U> Optional<U> of(T value, Case<T, U>... cases) { 
     for (Case<T, U> c : cases) { 
      if (value.equals(c.getTestValue())) { 
       return Optional.of(c.getSupplier().get()); 
      } 
     } 
     return Optional.empty(); 
    } 

    public static <T, U> Case<T, U> when(T testValue, Supplier<U> supplier) { 
     return new Case<T, U>() { 
      public T getTestValue() { 
       return testValue; 
      } 

      public Supplier<U> getSupplier() { 
       return supplier; 
      } 
     }; 
    } 

    public interface Case<T, U> { 
     Supplier<U> getSupplier(); 

     T getTestValue(); 
    } 
} 

は使用法:もちろん

String s = Switch.of(1, 
     when(0,() -> "zero"), 
     when(1,() -> "one"), 
     when(2,() -> "two")) 
     .orElse("not found"); 
System.out.println(s); 

、あなたのニーズに合うように、コードを微調整することができます。

+0

Zoiks。おそらく、このソリューションは、いくつかの '='演算子を避けるために、ヘビー級側で少しですか? –

+0

それは異なります。あなたはScalaのパターンマッチングの近くでさらに進んでいくことができます。それが本当に便利になります。私は 'スイッチは'それが "不都合で危険なだけだと思う​​し、私の控えめな暫定的な実装でさえ問題のいくつかを避けている(" fall-through "なし、デフォルトのケースを扱わなければならない)。 – Landei

+0

フォールスルー防止 - 多分;ただし、デフォルトのケースの処理は、明確な割り当てによってより簡単に実行できます。 –

2

これだけは可能です:

switch (a) { 
    case 1: i = 5; break; 
    case 2: i = 8; break; 
} 
1

はありません、そのような構文はありませんが、あなたはこの方法であなたのswitch文をラップし、同様の動作を実現することができます

public int switchMethod (int a) 
{ 
    switch (a) { 
     case 1: return 5; 
     case 2: return 8; 
     default : return 0; 
    } 
} 

... 
int i = switchMethod (1); 
0

また、連鎖三項ステートメントを使用することもできます。

int i = (a == 1) ? 5 
     : (a == 2) ? 8 
     : 0; 
関連する問題