Dans votre cas, vous n'avez pas besoin de cast, vous devez appeler toString ().
Integer i = 33;
String s = i.toString();
//or
s = String.valueOf(i);
//or
s = "" + i;
Fonderie. Comment ça marche?
Donné:
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 et B dans le même arbre d'héritage et nous pouvons ceci:
a = new A();
b = (B)a; // again downcast. Compiles but fails later, at runtime: java.lang.ClassCastException
Le compilateur doit autoriser les choses qui pourraient éventuellement fonctionner à l'exécution. Cependant, si le compilateur sait à 100% que la distribution ne pourrait pas fonctionner, la compilation échouera.
Donné:
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
Erreur: types d'inconvertibles B1 et B2. Le compilateur sait à 100% que la distribution ne pourrait pas fonctionner. Mais vous pouvez tromper le compilateur:
B2 b2 = (B2)(A)b1;
mais de toute façon à l'exécution:
Exception dans le thread "main" java.lang.ClassCastException: B1 ne peut pas être converti en B2
dans ton cas:
(Objet)
/ \
(Entier) (Chaîne)
Integer i = 33;
//String s = (String)i; - compiler error
String s = (String)(Object)i;
au moment de l'exécution: Exception dans le thread "main" java.lang.ClassCastException: java.lang.Integer ne peut pas être converti en java.lang.String
toString()
méthode qui le convertira en String. Comme plusieurs réponses le soulignent, c'est ce que vous devez utiliser. (Pour certains objets,toString()
ne renvoie pas une chaîne très utile , mais pourInteger
, il fait probablement exactement ce que vous voulez.)