2011-05-12 16 views
13

Neden bu işe yarar:Java, Float ..... imkansız cast Object neden?

 Object prova = 9.2; 
System.out.println(prova); 
Double prova2 = (Double) prova; 
System.out.println(prova2); 

Ve bu böyle değil mi?

Object prova = 9.2; 
System.out.println(prova); 
Float prova2 = (Float) prova; 
System.out.println(prova2); 

Benim java android uygulamasında 1 saat kaybettim bu yüzden bu yüzden bir çift ve bir floatta ikiye katlamak zorunda kaldım ya da bir istisna

+1

İkincisini gelen istisna metnini okursanız değil şamandıra Basit Float olarak Döküm deneyin gereken ben 'ClassCastException' olduğunu varsayarak, 'Float' ve 'Double' için miras hiyerarşisine bakın, cevap açık olmalıdır. – Anon

cevap

16

Eğer

Object prova = 9.2; 

yazdığında sen Autoboxing güvenerek Çünkü Eğer bir Float olmak istiyorsanız,

Bu java.lang.Float ve java.lang.Double'ın kardeş türleri olduğunu unutmayın; Eğer, her ne biçimde Numara ifade API'leri kullanmak istiyorsanız belirttiğiniz yoksa, bu bir çift olacağı için ortak tip örnek Number.floatValue()

8

vardı ve Double, Float'un bir alt türü değildir. Eğer böyle, olabilir 9.2f (bu durumda prova aslında Float olurdu) veya:

Ya değişmez bir şamandıra ile başlayabilir

Float prova2 = ((Double) prova).floatValue(); 
+0

Float'ın Double'in bir alt türü olması farketmez, oyuncu yine de işe yaramazdı. – jarnbjo

+0

Doğru, yanlış sırayla aldım. Şimdi daha iyi? – aioobe

14

9.2 çift değişmezi olduğunu. Bunun yerine 9.2f'u deneyin.

Object prova = 9.2f; // float literal is auto-boxed to a Float 
System.out.println(prova); 
Float prova2 = (Float) prova; // Float can be cast to Float, while Double cannot 
System.out.println(prova2); 

(muhtemelen söz dahil olması gerekirdi) hata mesajı oldukça iyi de bunu açıklıyor:

Exception in thread "main" java.lang.ClassCastException: 
    java.lang.Double cannot be cast to java.lang.Float 
+0

Ayrıca neler olduğunu da kontrol edebilirsiniz 'System.out.println (prova.getClass());' – leonbloy

2

için, java.lang.Number

olduğunu. Eğer bir float olmak istiyorsanız,

Object prova = 9.2F; 
System.out.println(prova); 
Float prova2 = (Float) prova; 
System.out.println(prova2); 
0

(