2010-02-28 30 views
15

Tengo una tabla hash llamada table. El valor de tipo es long. Obtengo valores usando .values(). Ahora quiero acceder a estos valores.No se puede convertir de tipo objeto a largo

Collection val = table.values(); 

Iterator itr = val.iterator(); 
long a = (long)itr.next(); 

Pero cuando trato de conseguirlo, me da error porque no puedo convertir de tipo object a long. ¿Cómo puedo rodearlo?

+0

tipo en la tabla hash no puede ser largo - debe significar largo. –

Respuesta

34

Prueba esto:

Long a = (Long)itr.next(); 

Se termina con un objeto largo, pero con autoboxing es posible que uso casi como una larga primitiva.

Otra opción es el uso de medicamentos genéricos:

Iterator<Long> itr = val.iterator(); 
    Long a = itr.next(); 
4

Probar: long a = ((Long) itr.next()).longValue();

+0

Esto es más prolijo de lo que debe ser; vea la otra respuesta, que se refiere al autoboxing. – crazyscot

+0

@crazyscot: del código de OP supuse que está usando una versión anterior de Java que Java 5. – missingfaktor

3

Se debe utilizar la nuevosGenéricos características de Java 5.

Cuando se toma una elemento de una colección , debe convertirlo al tipo de elemento que se almacena en la colección . Además de ser inconveniente, esto no es seguro. El compilador no comprueba si su conversión es igual que el tipo de la colección, , por lo que el lanzamiento puede fallar en tiempo de ejecución.

genéricos proporciona una manera para que usted pueda comunicarse del tipo de una colección para el compilador, por lo que puede ser comprobado . Una vez que el compilador conoce el tipo de elemento de la colección, el compilador puede verificar que ha utilizado la colección consistentemente y puede insertar los moldes correctos en los valores que se sacan de la colección.

Usted puede leer esto rápido howto o esto más completa tutorial.

1

en mi caso tengo una serie de objetos que recibo de un cliente Flex,

veces los números pueden ser interpretados por Java como int y, a veces, siempre,

manera de resolver el problema i utilizar la función 'toString()' de la siguiente manera:

public Object run(Object... args) { 

    final long uid = Long.valueOf(args[0].toString()); 
0
long value = Long.parseLong((String)request.getAttribute("")); 
0

que enfrentan el mismo problema, pero mientras se hace JSP codificación. Las sugerencias mencionadas anteriormente sobre Long y genéricos o no funcionaron o no encajaron en el fragmento de código.

tuve que resolverlo como esto (en JSP):

<%Object y=itr.next(); %> 

y utilizar después mi objeto y como <% = y%> como nos gustaría usar cualquier otra variable de Java en scriplet.

6

La clase Number se puede utilizar para superar la conversión de tipo de datos numéricos.

En este caso el siguiente código podría usarse:

long a = ((Number)itr.next()).longValue(); 



He preparado los siguientes ejemplos:

Objectalongejemplo - 1

// preparing the example variables 
Long l = new Long("1416313200307"); 
Object o = l; 

// Long casting from an object by using `Number` class 
System.out.print(((Number) o).longValue()); 

Consola salida sería:

1416313200307 



Objectadoubleejemplo - 2

// preparing the example variables 
double d = 0.11; 
Object o = d; 

// Double casting from an Object -that's a float number- by using `Number` class 
System.out.print(((Number) o).doubleValue() + "\n"); 

Console salida sería:

0.11 



Objectadoubleejemplo - 3

Tenga cuidado con esta simple error! Si se convierte un valor flotante utilizando la función doubleValue(), el primer valor podría no ser igual al valor final.
Como se muestra a continuación 0.11! = 0.10999999940395355.

// preparing the example variables 
float f = 0.11f; 
Object o = f; 

// Double casting from an Object -that's a float number- by using `Number` class 
System.out.print(((Number) o).doubleValue() + "\n"); 

Console salida sería:

0.10999999940395355 



Objectafloatejemplo - 4

// preparing the example variables 
double f = 0.11; 
Object o = f; 

// Double casting from an Object -that's a float number- by using `Number` class 
System.out.print(((Number) o).floatValue() + "\n"); 

consola salida sería:

0.11 
Cuestiones relacionadas