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.

¿Fue útil?

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top