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.

Strumenti personali