2011-05-12 15 views
13

Perché funziona:Java, cast impossibile Object to Float ..... perché?

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

E questo non lo fa?

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

ho perso 1 ora nel mio java androide causa dell'applicazione di questa cosa così ho dovuto gettarlo in un doppio e del doppio in un float o ho avuto un'eccezione

+1

Se si legge il testo ad eccezione di quest'ultima (che ho Supponendo che sia 'ClassCastException'), e quindi osserviamo la gerarchia dell'ereditarietà per' Float' e 'Double', la risposta dovrebbe essere evidente. – Anon

risposta

16

Perché si fa affidamento su autoboxing quando hai scritto

Object prova = 9.2; 

Se vuoi che sia un Float, prova a

Object prova = 9.2f; 

Ricorda che java.lang.Float e java.lang.Double sono tipi fratelli; il tipo comune è java.lang.Number

Se si vuole esprimere un numero in qualsiasi formato, utilizzare le API, ad esempio Number.floatValue()

8

Perché prova è un Double e Double non è un sottotipo di Float.

O si potrebbe iniziare con un galleggiante letterale: 9.2f (nel qual caso prova sarebbe in realtà un Float) o, si potrebbe in questo modo:

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

Non importa se Float è un sottotipo di Double, il cast non avrebbe funzionato comunque. – jarnbjo

+0

Giusto, l'ho fatto nell'ordine sbagliato. Meglio ora? – aioobe

14

9.2 è una doppia letterale. Prova invece a 9.2f.

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); 

Il messaggio di errore (che probabilmente avrebbe dovuto includere nella tua domanda) spiega abbastanza bene anche:

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

Puoi anche controllare cosa sta accadendo aggiungendo 'System.out.println (prova.getClass());' – leonbloy

2

Perché se non si specifica, sarà una doppia. Se si vuole che sia un galleggiante, è necessario

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

Prova a trasmettere come Float non galleggiante semplice