Instanceof em Java: descubra como funciona o operador
O operador Java instanceof pode ser usado para verificar a correspondência entre um objeto e uma classe e, assim, evitar mensagens de erro. O operador fornece essa informação na forma de uma sentença booleana, ou seja, “verdadeiro” ou “falso”. A verificação pode ser usada para evitar mensagens de erro.
O que é instanceof em Java?
Nem todas as variáveis em Java são suficientemente específicas para que se possa discernir a sua natureza imediatamente. Acima de tudo, quando se utiliza a linguagem de programação para criar projetos extensos com um grande número de variáveis, os dados de entrada, por exemplo, podem fazer com que uma variável acabe por ser apresentada como um de vários objetos. Por esse motivo, o Java disponibiliza o operador instanceof, que permite mostrar se a instância de uma variável de referência corresponde realmente a uma classe, subclasse ou interface. Se for esse o caso, o operador retorna o valor booleano “true”. Se não corresponder, o resultado será “false” (falso).
É fundamental, especialmente antes de converter um objeto desconhecido, realizar uma verificação com instanceof do Java. Desta forma, garante-se que o objeto pertence à classe assumida. Se esta verificação for omitida, pode ocorrer uma ClassCastException, um erro que resulta da conversão de um objeto numa classe diferente. A mensagem de erro pode causar confusão e complicações, especialmente em códigos mais longos, por isso é aconselhável realizar uma verificação preventiva.
Funcionalidade e sintaxe
Ao executar o operador instanceof em Java, uma variável de referência é comparada com uma classe específica também indicada. O operador limita-se a determinar se há correspondência ou não, sem incluir mais informações sobre a natureza do objeto ou da classe. A sintaxe é muito simples. Ela se parece com isto:
(objeto) instanceof (clase)javaSe (objeto) for uma instância de (clase), é apresentado «true». Caso contrário, é apresentado «false».
Exemplo simples de um operador instanceof em Java
A maneira mais simples de mostrar o funcionamento do instanceof em Java é com um breve exemplo. Para isso, primeiro crie uma classe chamada “Animal”.
public class Animal {
}javaNa etapa seguinte, essa classe é ampliada com uma subclasse chamada “Gato”.
public class Gato extends Animal {
}javaAgora pode utilizar instanceof do Java para verificar se uma instância de «Gato» pertence à classe «Animal». Para isso, são utilizadas as seguintes linhas, que são impressas com o comando do Java System.out.println:
public class Animal {}
public class Gato extends Animal {
public static void main(String args []{
Gato Gato = new Gato();
System.out.println(Gato instanceof Animal);
}
}javaNa consola, deverá ser exibido o seguinte:
truejavaMúltiplos níveis e a classe objeto
Este princípio também funciona com a classe Main e outras subclasses. É mostrado num exemplo com vários níveis, no qual o operador instanceof do Java é ampliado com if-else. O texto após as duas barras são comentários Java que servem apenas para esclarecer cada etapa do processo, mas que não têm impacto no resultado final do código.
// Clase 1
// Superclase
public class Animal {
}
// clase 2
// subclase
class Gato extends Animal {
}
// clase 3
// Clase Main
class Main {
public static void main(String[] args)
Gato Gato1 = new Gato();
if (Gato1 instanceof Gato)
System.out.println ("Gato1 es una instancia de Gato");
else
System.out.println ("Gato1 NO es una instancia de Gato");
if (Gato1 instanceof Animal)
System.out.println ("Gato1 es una instancia de Animal");
else
System.out.println ("Gato1 NO es una instancia de Animal");
if (Gato1 instanceof Object)
System.out.println ("Gato1 es una instancia de Object");
else
System.out.println ("Gato1 NO es una instancia de Object");
}
}javaNo exemplo, queremos saber se «Gato1» é uma instância da classe «Gato» e da superclasse «Animal». Nas duas consultas, obtém-se «true». Como Object ou a classe «java.lang.Object» está no topo da hierarquia, «Gatot1» também é uma instância de Object. Portanto, o operador instanceof do Java sempre mostrará «true» se for usado com a classe Object. O resultado final do código é mostrado:
Gato1 es una instancia de Gato
Gato1 es una instancia de Animal
Gato1 es una instancia de ObjectjavaSaída para um valor nulo
Se uma variável tiver o valor 0, ou seja, não contiver nenhum objeto, o operador instanceof do Java exibe automaticamente “false”. No exemplo a seguir, pode verificar isso:
class Gato {
}
class Main {
public static void main(String[] args)
{
Gato Gato2 = null;
if (Gato2 instanceof Gato)
System.out.println ("Gato2 es una instancia de Gato");
else
System.out.println ("Gato2 NO es una instancia de Gato");
}
}javaO resultado final do código é apresentado:
Gato2 NO es una instancia de GatojavaAs superclasses não são uma instância de uma classe inferior.
Embora na hierarquia os objetos das subclasses também pertençam às classes superiores, este princípio não funciona inversamente. Isso pode ser visto no exemplo a seguir:
class Animal {
}
class Gato extends Animal {
}
class Main {
public static void main(String[] args)
{
Animal Bello = new Animal ();
if (Bello instanceof gato)
System.out.println ("Bello es una instancia de Gato");
else
System.out.println ("Bello NO es una instancia de Gato");
}
}javaA saída, neste caso, é
Bello NO es una instancia de GatojavaMensagem de erro por falta de relação
Se não houver relação entre o objeto e a classe, será exibida uma mensagem de erro. Para mostrá-la, é criada abaixo uma classe chamada “Cão”, que pertence à superclasse “Animal”, mas não tem relação com “Gato”.
class Perro implements Animal {
}
class Main {
public static void main(String[] args)
{
Gato Gato3 = new Gato ();
System.out.println (Gato3 instanceof Perro);
}
}javaNeste caso, recebemos uma mensagem de erro indicando que não há ligação entre as classes «Gato» e «Cão». Esta mensagem tem o seguinte aspecto:
java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Gato and PerrojavaNo Guia Digital, encontrará outros tutoriais e artigos sobre Java. Por exemplo, há um artigo sobre Java e JavaScript ou sobre Java e Python. Se quiser saber mais sobre operadores Bitwise de Java, temos o guia perfeito para si.
fb8fa02f4d3ec00006cb3f878b114119