10. Conversioni di tipo

Promozioni

Casting

È possibile forzare una conversione mediante casting: (<tipo>)<espressione>.

Tra tipi primitivi le seguenti conversioni forzate sono sempre ammesse:

Casting per gli oggetti

Se faccio un casting esplicito, cioè se uso la notazione var = (NewType) secondVar, valgono le seguenti regole:

È anche possibile forzare la conversione dal tipo referenziato T a un suo sottotipo T1: a differenza del caso descritto sopra, si può fare a patto che si faccia utilizzo del polimorfismo prima.

// Esempio
public class Animal{...}
public class Cat extends Animal{...} // La classe Cat è sottoclasse della classe Animal

// CASO 1:
Animal an = new Animal();
Cat ca = new Cat();
ca = (Cat)an; // NO!! sto cercando di fare il downcasting di an e di assegnare il risultato ad un oggetto di tipo Cat

// CASO 2:
Animal an;
Cat ca = new Cat();
an = ca; // Uso il polimorfismo: a questo punto il tipo dinamico di an è Cat
ca = (Cat)an; // Dato che il tipo dinamico di an è Cat, ora posso fare il casting esplicito e fare l'assegnamento

instaceof

Per evitare errori a runtime e determinare qual è il tipo dinamico di un oggetto è possibile usare l’operatore unario instanceof.

if (a instanceof String) 
	System.out.println("1");