пункт. Вложение условной логики в константы перечисления намного лучше, чем предложение 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
?