Java/instanceof
Wikibooks, manuali e libri di testo liberi.
È un operatore nativo di Java, che va adoperato nella seguente forma:
anyObject instanceof AnyClass
dove anyObject è una qualunque espressione, purché il suo tipo statico, che indichiamo come BaseClass, sia non primitivo, e AnyClass una qualunque classe che discenda da BaseClass. instanceof restituirà true se anyObject è non nullo e il tipo dell'oggetto cui fa riferimento è AnyClass, o una classe da essa discendente, false altrimenti. Se utilizziamo al secondo membro una classe che non discende da BaseClass, è chiaro che l'operatore non potrà mai restituire true, e il probabile errore da parte del programmatore verrà segnalato da un errore di compilazione.
Vediamo un esempio:
public class Ciao { public static void main(String [] args) { Object pippo = new String("Ciao"); String pluto = "Ciao"; Object paperino = new Object(); System.out.println(pippo instanceof String); System.out.println(pippo instanceof Object); System.out.println(pluto instanceof String); System.out.println(pluto instanceof Object); System.out.println(paperino instanceof String); System.out.println(paperino instanceof Object); } }
produrrà il seguente output:
true
true
true
true
false
true
Come si vede pippo e pluto sono instanze tanto di Object quanto di String (che gerarchicamente sono in relazione padre->figlio); paperino è instanza solo di Object.
Il presente codice è invece sintatticamente errato:
public class Ciao { public static void main(String [] args) { String pippo = "Ciao"; System.out.println(pippo instanceof StringBuffer); //errore di compilazione } }
Qui l'errore è di tipo inconvertible types, in quando String e StringBuffer, nonostante l'assonanza, non sono in relazione gerarchica tra loro.
