¿Cómo puedo convertir de int a largo en Java?
-
19-09-2019 - |
Pregunta
No dejo de encontrar tanto aquí y la gente de Google teniendo problemas al pasar de long
a int
y no al revés. Sin embargo, estoy seguro de que no soy el único que ha funcionado en este escenario antes de ir a partir de int
Long
.
Las únicas respuestas que he encontrado fueron "Sólo hay que establecer el mayor tiempo en el primer lugar" que en realidad no se ocupa de la cuestión.
Al principio me probé fundición, pero me sale un "Cannot cast from int to Long
"
for (int i = 0; i < myArrayList.size(); ++i ) {
content = new Content();
content.setDescription(myArrayList.get(i));
content.setSequence((Long) i);
session.save(content);
}
Como se puede imaginar que estoy un poco confundido, estoy atascado utilizando int
ya algún contenido está entrando como un ArrayList
y la entidad para la que estoy almacenando esta información requiere el número de secuencia como un largo.
Solución
Tenga en cuenta que hay una diferencia entre un elenco de long
y un elenco de Long
. Si lanzas a long
(un valor primitivo), entonces debe ser encajonado automáticamente a un Long
(el tipo de referencia que lo envuelve).
Se puede usar alternativamente new
para crear una instancia de Long
, la inicialización con el valor int
.
Otros consejos
Utiliza el siguiente: Long.valueOf(int);
.
Si ya tiene la int escrito como un entero que puede hacer esto:
Integer y = 1;
long x = y.longValue();
utilizar
new Long(your_integer);
o
Long.valueOf(your_integer);
Tengo este pequeño juguete, que también se ocupa de las interfaces de los no genéricos. Estoy bien con ella lanzando un ClassCastException si alimentar mal (OK y feliz)
public class TypeUtil {
public static long castToLong(Object o) {
Number n = (Number) o;
return n.longValue();
}
}
En Java que puede hacer:
int myInt=4;
Long myLong= new Long(myInt);
en su caso sería:
content.setSequence(new Long(i));
Vamos a obtener el valor de largo por el uso de referencia Number
.
public static long toLong(Number number){
return number.longValue();
}
Funciona para todos los tipos de números, aquí está una prueba:
public static void testToLong() throws Exception {
assertEquals(0l, toLong(0)); // an int
assertEquals(0l, toLong((short)0)); // a short
assertEquals(0l, toLong(0l)); // a long
assertEquals(0l, toLong((long) 0)); // another long
assertEquals(0l, toLong(0.0f)); // a float
assertEquals(0l, toLong(0.0)); // a double
}
¿Qué tal
int myInt = 88;
// no se compilará
Long myLong = myInt;
// recopila y conserva el espíritu no NULL de int. La mejor Reparto es sin molde en absoluto . Por supuesto, su caso puede requerir el uso Los valores largos y posibles NULL. Pero si el int, u otras posiciones largas son su única entrada, y su método se pueden modificar, sugeriría este enfoque.
long myLong = myInt;
// Compila, es la forma más eficiente, y deja claro que el valor de origen, es y nunca será NULL.
Long myLong = (long) myInt;
1,new Long(intValue);
2,Long.valueOf(intValue);
Yo tenía una gran cantidad de problemas con esto. Sólo quería:
thisBill.IntervalCount = jPaidCountSpinner.getValue();
Cuando IntervalCount es un largo, y la JSpinner se estableció para devolver un largo. Al final tuve que escribir esta función:
public static final Long getLong(Object obj) throws IllegalArgumentException {
Long rv;
if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
rv = Long.parseLong(obj.toString());
}
else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
rv = (Long) obj;
}
else if(obj.getClass() == String.class) {
rv = Long.parseLong(obj.toString());
}
else {
throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
}
return rv;
}
que parece hacer el truco. Ninguna cantidad de sencilla de fundición, ninguna de las soluciones anteriores funcionó para mí. Muy frustrante.
//Suppose you have int and you wan to convert it to Long
int i=78;
//convert to Long
Long l=Long.valueOf(i)
Tan pronto como hay un solo método Long.valueOf(long)
, emitidos desde int
a long
se hará de manera implícita en el caso de utilizar Long.valueOf(intValue)
.
La forma más clara de hacerlo es
Integer.valueOf(intValue).longValue()