Enquanto me preparava para o OCPJP 21, me deparei com o tópico Escopo de fluxo.
preciso de alguma orientação para entender o conceito. abaixo está o trecho de código
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");
}
}
O snippet acima resulta em "Não é possível encontrar o símbolo" para a variável guppy. Mas se eu remover a palavra-chave else, como abaixo. A variável guppy permanece no escopo. Nenhum erro do compilador.
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);
minha segunda observação é a seguinte ref snippet
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);
}
}
O snippet acima compila com sucesso, mas se eu comentar return e adicionar a instrução SOP, o resultado será não é possível encontrar o símbolo para os dados.
por favor me oriente para entender o conceito.