我正在尝试执行以下操作:
abstract class G {
protected var = 0;
}
class G1 extends G {
var = 1;
}
class G2 extends G {
var = 2;
}
// This is where I'm having a problem
public G method() {
switch(someVar) {
case x:
return new G1();
case y:
return new G2();
}
}
Java抱怨该方法必须返回一种G类型。我应该如何返回G1或G2(两者都延伸G)?很可能我正在接近这个完全错误的......
谢谢。
答案 0 :(得分:4)
您的问题与继承无关;如果您的交换机不属于G
或case x
,则必须抛出异常或返回case y
类型的内容。
例如:
public G method() {
switch(someVar) {
case x:
return new G1();
case y:
return new G2();
default:
// You can return null or a default instance of type G here as well.
throw new UnsupportedOperationException("cases other than x or y are not supported.");
}
}
答案 1 :(得分:0)
在switch-case
块中添加默认选项:
default: ....
抱怨是因为如果someVar
不是x
或y
,那么它就没有任何退货声明。
或者,您可以添加默认return statement in the end
e.g。
public G method() {
switch(someVar) {
case x:
return new G1();
case y:
return new G2();
}
return defaultValue; // return default
}