пункт. Вложение условной логики в константы перечисления намного лучше, чем предложение switch

лятор утверждает, что в концеMyClass.parse(), Вот код:

package de.hs_rm.safelyovertaken.ble;

import android.support.annotation.NonNull;

import java.util.Arrays;

class MyClass {

    @NonNull
    static MyClass parse(byte[] encoded) throws MyParseException {

        MyEnum myEnum = MyEnum.parse(Arrays.copyOfRange(encoded, 0, 2));

        switch (myEnum) {
            case A:
                return new MyClassA();

            case B:
                return new MyClassB();

            case C:
                return new MyClassC();
        }

        // compile error: "Missing return statement"

//        return null; // should never be reached
//        throw new AssertionError("Should never be reached");
    }
}

enum MyEnum {
    A, B, C;

    @NonNull
    static MyEnum parse(byte[] encoded) throws MyParseException {

        MyEnum result = null;

        // parse logic here

        if (result == null) {
            throw new MyParseException();
        }

        return result;
    }
}

class MyParseException extends Exception {
}

class MyClassA extends MyClass {
}

class MyClassB extends MyClass {
}

class MyClassC extends MyClass {
}

Верен ли компилятор? (Android Studio)

Если да, то при каких обстоятельствах может быть достигнут конец метода? думаюmyEnum не может бытьnull и все перечисления описаны в операторе switch, где в любом случае оператор return покинет метод.myEnum не может бытьnull поскольку@NonNull методMyEnum.parse() выдает исключение, если результатnull.

Если нет, вы бы отметили (надеюсь) недостижимый конец методаreturn null // should never be reached или броситьAssertionError?

Ответы на вопрос(1)

Ваш ответ на вопрос