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.
Zoiks. Belki de bu çözüm, bir kaç '=' operatörlerden kaçınmak için ağır tarafın biraz üzerindedir. –
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
Düşüşün önlenmesi - belki; Öte yandan, temerrüt davalarının ele alınması, kesin görevlendirme ile daha kolay bir şekilde uygulanmaktadır. –