public Shape next() { switch (random.nextInt(3)) { default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); } }
default放在'return new Triangle();'下面,eclipse会出现红x,you must return a result of type Shape,这很好理解
default放在'case 0'上面,就不会出现上面的编译错误,不懂是为什么,可能switch-case的机制还没有理解透?
哪位大虾帮忙解释解释
问题补充
这是怎么了。。20几个阅读,没有回复的
问题补充
gtssgtss 写道
自动贯穿。。。。
这是一个很垃圾的特性。。。。
太基础了,大家都不想打字,详细还是去看书吧
这是一个很垃圾的特性。。。。
太基础了,大家都不想打字,详细还是去看书吧
我被鄙视了。。还真不知道这特性
问题补充
gtssgtss 写道
自动贯穿。。。。
这是一个很垃圾的特性。。。。
太基础了,大家都不想打字,详细还是去看书吧
这是一个很垃圾的特性。。。。
太基础了,大家都不想打字,详细还是去看书吧
你说的是哪本书?自动贯穿这名称google没搜到
问题补充
确实是很纠结的一个特性。。
实验了一把
找到了一段话,自己也总结了一点
没有case匹配的时候,执行default中的内容,default中没有退出switch-case的语句,默认执行default下面case下的语句,如果第一个case下没有return,会接着执行下面的case,一直执行到return 语句
switch (10) {
default:
case 0:
System.out.println("0");
case 1:
System.out.println("1");
case 2:
return new Triangle();
}
这样改的话,它就会打印出0,1,然后return
问题补充
lqixv 写道
估计你是看书不仔细。你回头看看对 switch 语句的解释,在 case 里,如果没有 break 是不会跳出 switch 的。因此,你把 default 放在后面的话,就相当于 在找不到 0、1、2 时,没有return 值了。而你的方法本应该返回 Shape,那肯定报错了
估计你问题没有看清楚吧,我知道case 没有break是不会跳出的,这里讨论的是如果没有case可以匹配上,default放在最上面,会执行default下的case,直到return或break为止。