【发布时间】:2018-05-02 20:10:23
【问题描述】:
编译器声称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 {
}
编译器对吗? (安卓工作室)
如果是这样,在什么情况下可以达到方法的结尾?我认为 myEnum 不能是 null 并且所有枚举都包含在 switch 语句中,在任何情况下,return 语句都会离开该方法。 myEnum 不能是 null,因为如果结果是 null,@NonNull 方法 MyEnum.parse() 会抛出异常。
如果不是,您会用return null // should never be reached 标记方法的(希望是)无法到达的结尾还是抛出AssertionError?
【问题讨论】:
-
'
myEnum不能是null,因为如果结果是MyEnum.parse(),@NonNull方法会抛出异常null' - 编译器不知道这一点
标签: java enums compiler-errors