uso de “Instancia de” en java

¿Para qué se utiliza el operador ‘instanceof’?

Aprendí que Java tiene el operador instanceof . ¿Puede explicar dónde se usa y cuáles son sus ventajas?

Básicamente, verifica si un objeto es una instancia de una clase específica. Normalmente lo usa cuando tiene una referencia o parámetro para un objeto que es de una súper clase o tipo de interfaz y necesita saber si el objeto real tiene algún otro tipo (normalmente más concreto).

Ejemplo:

 public void doSomething(Number param) { if( param instanceof Double) { System.out.println("param is a Double"); } else if( param instanceof Integer) { System.out.println("param is an Integer"); } if( param instanceof Comparable) { //subclasses of Number like Double etc. implement Comparable //other subclasses might not -> you could pass Number instances that don't implement that interface System.out.println("param is comparable"); } } 

Tenga en cuenta que si tiene que usar ese operador muy a menudo, generalmente es una pista de que su diseño tiene algunos defectos. Por lo tanto, en una aplicación bien diseñada debe usar ese operador lo menos posible (por supuesto, hay excepciones a esa regla general).

instanceof se usa para verificar si un objeto es una instancia de una clase, una instancia de una subclase o una instancia de una clase que implementa una interfaz particular.

Lea más de la definición de idioma de Oracle aquí.

instanceof se puede usar para determinar el tipo real de un objeto:

 class A { } class C extends A { } class D extends A { } public static void testInstance(){ A c = new C(); A d = new D(); Assert.assertTrue(c instanceof A && d instanceof A); Assert.assertTrue(c instanceof C && d instanceof D); Assert.assertFalse(c instanceof D); Assert.assertFalse(d instanceof C); } 

instanceof es una palabra clave que se puede usar para probar si un objeto es de un tipo especificado.

Ejemplo:

 public class MainClass { public static void main(String[] a) { String s = "Hello"; int i = 0; String g; if (s instanceof java.lang.String) { // This is going to be printed System.out.println("s is a String"); } if (i instanceof Integer) { // This is going to be printed as autoboxing will happen (int -> Integer) System.out.println("i is an Integer"); } if (g instanceof java.lang.String) { // This case is not going to happen because g is not initialized and // therefore is null and instanceof returns false for null. System.out.println("g is a String"); } } 

Aquí está mi fuente .