Nel tuo caso non è necessario il casting, devi chiamare toString ().
Integer i = 33;
String s = i.toString();
//or
s = String.valueOf(i);
//or
s = "" + i;
Casting. Come funziona?
Dato:
class A {}
class B extends A {}
(A)
|
(B)
B b = new B(); //no cast
A a = b; //upcast with no explicit cast
a = (A)b; //upcast with an explicit cast
b = (B)a; //downcast
A e B nello stesso albero ereditario e possiamo questo:
a = new A();
b = (B)a; // again downcast. Compiles but fails later, at runtime: java.lang.ClassCastException
Il compilatore deve consentire cose che potrebbero funzionare in fase di esecuzione. Tuttavia, se il compilatore sa al 100% che il cast non potrebbe funzionare, la compilazione fallirà.
Dato:
class A {}
class B1 extends A {}
class B2 extends A {}
(A)
/ \
(B1) (B2)
B1 b1 = new B1();
B2 b2 = (B2)b1; // B1 can't ever be a B2
Errore: tipi invertibili B1 e B2. Il compilatore sa al 100% che il cast non potrebbe funzionare. Ma puoi imbrogliare il compilatore:
B2 b2 = (B2)(A)b1;
ma comunque in fase di esecuzione:
Eccezione nel thread "main" java.lang.ClassCastException: impossibile eseguire il cast di B1 su B2
nel tuo caso:
(Oggetto)
/ \
(Intero) (Stringa)
Integer i = 33;
//String s = (String)i; - compiler error
String s = (String)(Object)i;
in fase di esecuzione: eccezione nel thread "main" java.lang.ClassCastException: java.lang.Integer non può essere cast su java.lang.String
toString()
metodo che lo convertirà in una stringa. Come sottolineano diverse risposte, questo è ciò che dovresti usare. (Per alcuni oggetti,toString()
non restituisce una stringa molto utile , maInteger
probabilmente fa esattamente quello che vuoi.)