Java è un linguaggio fortemente tipizzato e consente solo la trasmissione di un oggetto a una delle sue classi o interfacce padre. Cioè, se avete la seguente:
class A {}
interface I {}
class B extends A implements I {}
class C {}
si può lanciare un oggetto di tipo B in questo modo:
B b = new B();
A a = b; // no need for explicit casting
I i = b;
Object o = b; // Object is implicit parent of A
C c = b; // ERROR C isn't a parent class of b
Questo si chiama upcasting. È inoltre possibile bassi:
A a = new B();
B b = (B) b;
è necessario utilizzare cast esplicito qui e JVM controllerà in runtime se il cast è davvero consentita.
Il casting String.class.cast(o)
è utile, quando non si conosce il tipo specifico a cui si sta eseguendo il casting in fase di compilazione.
Il .toString()
non sta trasmettendo. È solo un metodo, che dovrebbe restituire una rappresentazione String del tuo oggetto. Ma la rappresentazione non è l'oggetto, è solo una rappresentazione. Questo metodo è definito nella classe Object
, quindi è presente in tutte le classi e viene leggermente modificato nella lingua. Cioè, se si scrive
String s = "Hell " + o;
JVM chiamerà o.toString()
metodo per voi per ottenere che la rappresentazione.
In realtà,' o.toString() 'non è un cast, si ottiene semplicemente la rappresentazione di stringa di un oggetto;) – NiziL
Manca: 'String str4 = String.valueOf (o);', che è IMHO la soluzione preferita, in quanto non esegue il cast e copre bene il caso che 'o' è' null'. – Marco13
@ Marco13: i ho chiesto questo in una risposta menzionata da "Rahul Tripathi". Questo era nella mia mente, ma ho pensato che fosse piuttosto semplice chiamare il metodo e non si collega al casting –