Встроенный оператор переключения Java? - PullRequest
4 голосов
/ 27 мая 2019

Есть ли способ реализовать оператор встроенного переключателя в Java?

Сейчас я использую следующее:

    private static String BaseURL = (lifeCycle == LifeCycle.Production)
        ? prodUrl
        : ( (lifeCycle == LifeCycle.Development)
            ? devUrl
            : ( (lifeCycle == LifeCycle.LocalDevelopment)
                  ? localDevUrl
                  : null
            )
        );

Я бы предпочел, чтобы я мог сделать что-то вроде:

    private static String BaseURL = switch (lifeCycle) {
        case Production: return prodUrl;
        case Development: return devUrl;
        case LocalDevelopment: return localDevUrl;
    }

Я знаю, что вы могли бы добиться этого, переместив переменную BaseURL в функцию GetBaseURL, где происходит переключение (см. Ниже) , однако мне больше всего любопытно, если эта функция даже существует в Java.

static String GetBaseURL() {
    switch(lifeCycle) {
        case Production: return prodUrl;
        case Development: return devUrl;
        case LocalDevelopment: return localDevUrl;
    }

    return null;
} 

Я перехожу из Swift, и в Swift я знаю, что вы могли бы сделать это:

private static var BaseURL:String {
    switch (API.LifeCycle) {
        case .Production:
            return prodUrl
        case .Development:
            return devUrl
        case .LocalDevelopment:
            return localDevUrl
    }
}

1 Ответ

7 голосов
/ 27 мая 2019

Предполагая, что LifeCycle - это enum, тогда вам повезло, поскольку выражений переключателя были введены в качестве функции предварительного просмотра в JDK 12. Используя их, ваш код будет выглядеть следующим образом:

LifeCycle lifeCycle = ...;

String baseURL = switch (lifeCycle) {
    case Production -> prodUrl;
    case Development -> devUrl;
    case LocalDevelopment -> localDevUrl;
};

Если перечисление LifeCycle содержит больше, чем эти три значения, вам нужно добавить регистр default; в противном случае это будет ошибка во время компиляции.

...