O operador Java ins­tan­ceof pode ser usado para verificar a cor­res­pon­dên­cia entre um objeto e uma classe e, assim, evitar mensagens de erro. O operador fornece essa in­for­ma­ção na forma de uma sentença booleana, ou seja, “ver­da­deiro” ou “falso”. A ve­ri­fi­ca­ção pode ser usada para evitar mensagens de erro.

O que é ins­tan­ceof em Java?

Nem todas as variáveis em Java são su­fi­ci­en­te­mente es­pe­cí­fi­cas para que se possa discernir a sua natureza ime­di­a­ta­mente. Acima de tudo, quando se utiliza a linguagem de pro­gra­ma­çã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 apre­sen­tada como um de vários objetos. Por esse motivo, o Java dis­po­ni­bi­liza o operador ins­tan­ceof, que permite mostrar se a instância de uma variável de re­fe­rên­cia cor­res­ponde realmente a uma classe, subclasse ou interface. Se for esse o caso, o operador retorna o valor booleano “true”. Se não cor­res­pon­der, o resultado será “false” (falso).

É fun­da­men­tal, es­pe­ci­al­mente antes de converter um objeto des­co­nhe­cido, realizar uma ve­ri­fi­ca­ção com ins­tan­ceof do Java. Desta forma, garante-se que o objeto pertence à classe assumida. Se esta ve­ri­fi­ca­ção for omitida, pode ocorrer uma Clas­s­Cas­tEx­cep­tion, um erro que resulta da conversão de um objeto numa classe diferente. A mensagem de erro pode causar confusão e com­pli­ca­ções, es­pe­ci­al­mente em códigos mais longos, por isso é acon­se­lhá­vel realizar uma ve­ri­fi­ca­ção pre­ven­tiva.

Fun­ci­o­na­li­dade e sintaxe

Ao executar o operador ins­tan­ceof em Java, uma variável de re­fe­rên­cia é comparada com uma classe es­pe­cí­fica também indicada. O operador limita-se a de­ter­mi­nar se há cor­res­pon­dên­cia ou não, sem incluir mais in­for­ma­ções sobre a natureza do objeto ou da classe. A sintaxe é muito simples. Ela se parece com isto:

(objeto) instanceof (clase)
java

Se (objeto) for uma instância de (clase), é apre­sen­tado «true». Caso contrário, é apre­sen­tado «false».

Exemplo simples de um operador ins­tan­ceof em Java

A maneira mais simples de mostrar o fun­ci­o­na­mento do ins­tan­ceof em Java é com um breve exemplo. Para isso, primeiro crie uma classe chamada “Animal”.

public class Animal {
}
java

Na etapa seguinte, essa classe é ampliada com uma subclasse chamada “Gato”.

public class Gato extends Animal {
}
java

Agora pode utilizar ins­tan­ceof do Java para verificar se uma instância de «Gato» pertence à classe «Animal». Para isso, são uti­li­za­das 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);
}
}
java

Na consola, deverá ser exibido o seguinte:

true
java

Múltiplos níveis e a classe objeto

Este princípio também funciona com a classe Main e outras sub­clas­ses. É mostrado num exemplo com vários níveis, no qual o operador ins­tan­ceof do Java é ampliado com if-else. O texto após as duas barras são co­men­tá­rios Java que servem apenas para es­cla­re­cer 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");
	}
}
java

No exemplo, queremos saber se «Gato1» é uma instância da classe «Gato» e da su­per­classe «Animal». Nas duas consultas, obtém-se «true». Como Object ou a classe «java.lang.Object» está no topo da hi­e­rar­quia, «Gatot1» também é uma instância de Object. Portanto, o operador ins­tan­ceof 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 Object
java

Saída para um valor nulo

Se uma variável tiver o valor 0, ou seja, não contiver nenhum objeto, o operador ins­tan­ceof do Java exibe au­to­ma­ti­ca­mente “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");
	}
}
java

O resultado final do código é apre­sen­tado:

Gato2 NO es una instancia de Gato
java

As su­per­clas­ses não são uma instância de uma classe inferior.

Embora na hi­e­rar­quia os objetos das sub­clas­ses também pertençam às classes su­pe­ri­o­res, este princípio não funciona in­ver­sa­mente. 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");
	}
}
java

A saída, neste caso, é

Bello NO es una instancia de Gato
java

Mensagem 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 à su­per­classe “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);
	}
}
java

Neste 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 Perro
java
Dica

No Guia Digital, en­con­trará outros tutoriais e artigos sobre Java. Por exemplo, há um artigo sobre Java e Ja­vaS­cript ou sobre Java e Python. Se quiser saber mais sobre ope­ra­do­res Bitwise de Java, temos o guia perfeito para si.

fb8fa02f4d3ec00006cb3f878b114119

Ir para o menu principal