在java中,这种语法是可能的:
int a = 1;
int i = 0;
i = a == 1 ? 5 : 8;
所以在这种情况下我会是5因为a = 1。
切换案例是否有类似的语法? 例如:
int a = 1;
int i = 0;
i = switch (a) {
case 1: 5; break;
case 2: 8; break;
}
所以我也是5因为a = 1?
答案 0 :(得分:2)
没有
只有这样才有可能:
switch (a) {
case 1: i = 5; break;
case 2: i = 8; break;
}
答案 1 :(得分:1)
不,没有这样的语法,但你可以将switch语句包装在一个方法中并实现类似的行为:
public int switchMethod (int a)
{
switch (a) {
case 1: return 5;
case 2: return 8;
default : return 0;
}
}
...
int i = switchMethod (1);
答案 2 :(得分:0)
您也可以使用链式三元语句:
int i = (a == 1) ? 5
: (a == 2) ? 8
: 0;
答案 3 :(得分: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);
当然,您可以调整代码以满足您的需求。