Java语法:将case转换为变量?

时间:2016-04-13 09:23:18

标签: java syntax switch-statement case

在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?

4 个答案:

答案 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);

当然,您可以调整代码以满足您的需求。