当我准备 OCPJP 21 时,遇到了 Flow 范围主题。
我需要一些指导来理解这个概念。下面是代码片段
public class Question28
{
static void getFish(Object fish) {
if(!(fish instanceof String guppy))
System.out.println("Eat!");
else if(!(fish instanceof String guppy)) {
throw new RuntimeException();
}
System.out.println(guppy);
System.out.println("Swim!");
}
public static void main(String args[]) {
getFish("ashish");
}
}
上述代码片段导致变量 guppy “无法找到符号”。但如果我删除 else 关键字,如下所示。guppy 变量仍然在范围内。没有编译器错误。
static void getFish(Object fish) {
if(!(fish instanceof String guppy))
System.out.println("Eat!");
if(!(fish instanceof String guppy)) {
throw new RuntimeException();
}
System.out.println(guppy);
我的第二个观察如下参考片段
class Sample2 {
static void printNumberTwice(Number number) {
if(!(number instanceof Integer data))
return ;
//System.out.println("Eat!");
System.out.println(data.intValue());
}
public static void main(String args[]) {
printNumberTwice(5);
}
}
上述代码片段成功编译,但如果我注释掉返回并添加 SOP 语句,则会导致无法找到数据符号。
请指导我理解这个概念。