class RandomShapeGenerator{
private Random rand = new Random(47) ;
public Shape do1(){
switch(rand.nextInt(3)){
default:
case 1:
return new Triangle() ;
case 2:
return new Square() ;
case 0:
return new Cricle() ;
}
}
}
这里如果把default:放在后面,即:class RandomShapeGenerator{
private Random rand = new Random(47) ;
public Shape do1(){
switch(rand.nextInt(3)){
case 1:
return new Triangle() ;
case 2:
return new Square() ;
case 0:
return new Cricle() ;
default:
}
}
}
则会报错,说:“此方法必须返回Shape类型的结果”,为什么呢?

解决方案 »

  1.   

    你定义的do1() 方法是是shape类型  所以必须返回shape类型的方法 你shape类型是哪来的  return 后面的三个匿名对象和shape好像没什么联系!把shape  和   Triangle Square  Cricle  四个类的代码传上来看看!
      

  2.   

    你定义的public Shape do1()方法必须要有返回值,当你把default放在最后时,没有给他返回值啊 肯定就会抱错了撒
      

  3.   

    default没有返回值,当然要报错了
      

  4.   

    switch-case:
      当有case匹配的时候,就执行该case中的内容,如果case中没有退出switch-case的语句(break或return),他会顺着执行这个case下面的所有case,直到break或者return。(在这里不纠exit,exception,error等)。
      当没有case匹配的时候,就执行default中的内容,如果default中没有退出switch-case的语句,他会顺着执行default下面的所有case,直到退出switch-case。default放在最前面,没有case匹配的时候,它执行default中的内容,default中没有退出switch-case的语句,并顺着执行default下面的case,现在你的default下面的case都有return,所以不会报错。default放在最后时,没有case匹配的时候,它执行default中的内容,default中没有退出switch-case的语句下面也没有case,当然也有return,所以会报错。