2016-04-13 78 views
0

bu sözdizimi mümkündür: a = 1.Java sözdizimi: Değişken olarak durum değiştir? java olarak

anahtarı durum için de benzer bir sözdizimi var mı çünkü

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

Yani bu durumda ben 5 olurdu? Böyle Örneğin :

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

Yani ben de 5 çünkü = 1 olacağı?

cevap

0

Ne yazık ki, bu sözdizimi desteklenmiyor. Ama Java 8 ile böyle davranışını taklit olabilir:

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(); 
    } 
} 

Kullanımı: Elbette

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

Eğer ihtiyaçlarınıza göre kod çimdik.

+0

Zoiks. Belki de bu çözüm, bir kaç '=' operatörlerden kaçınmak için ağır tarafın biraz üzerindedir. –

+0

Bu bağlıdır. Çok daha ileri gidebilir, Scala'nın desen eşleştirmesine yakın olabilir, o zaman gerçekten işe yarar hale gelir. Bence "olduğu gibi", "sadece rahatsız edici ve tehlikeli" ve mütevazı derme çatma bir uygulama bile bazı problemleri önler (hiçbir "düşüş", varsayılan durumda ele alınması gerekir). – Landei

+0

Düşüşün önlenmesi - belki; Öte yandan, temerrüt davalarının ele alınması, kesin görevlendirme ile daha kolay bir şekilde uygulanmaktadır. –

2

sayılı

Sadece bu mümkündür:

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

Hayır, böyle bir söz dizimi, ama bir yöntem içinde switch deyimi sarın ve benzer bir davranış elde edebilirsiniz:

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

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

Alternatif olarak zincirleme üçlü deyimlerini kullanabilirsiniz:

int i = (a == 1) ? 5 
     : (a == 2) ? 8 
     : 0;