Come faccio a convertire da int a lungo in Java?
-
19-09-2019 - |
Domanda
Continuo a trovare sia su qui e Google la gente che ha difficoltà che va da long
a int
e non il contrario. Eppure sono sicuro che io non sono l'unico che ha eseguito in questo scenario prima di andare da int
a Long
.
Le uniche altre risposte che ho trovato sono stati "Basta impostare il più a lungo in primo luogo", che in realtà non affronta la questione.
Inizialmente ho provato la fusione, ma ho 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);
}
Come si può immaginare io sono un po 'perplesso, mi sono bloccato con int
poiché alcuni contenuti è in arrivo come ArrayList
e il soggetto per il quale sto memorizzazione di queste informazioni richiede il numero di sequenza come una lunga.
Soluzione
Si noti che c'è una differenza tra un cast di long
e un cast di Long
. Se lanci a long
(un valore di base) allora dovrebbe essere inscatolato automaticamente a un Long
(il tipo di riferimento che lo avvolge).
Si potrebbe in alternativa utilizzare new
per creare un'istanza di Long
, l'inizializzazione con il valore int
.
Altri suggerimenti
Utilizza il seguente: Long.valueOf(int);
.
Se hai già l'int digitata come numero intero si può fare questo:
Integer y = 1;
long x = y.longValue();
usare
new Long(your_integer);
o
Long.valueOf(your_integer);
ho questo piccolo giocattolo, che si occupa anche di interfacce non generici. Sto bene con esso gettando un ClassCastException se alimentare sbagliato (OK e felice)
public class TypeUtil {
public static long castToLong(Object o) {
Number n = (Number) o;
return n.longValue();
}
}
In Java si può fare:
int myInt=4;
Long myLong= new Long(myInt);
nel tuo caso sarebbe:
content.setSequence(new Long(i));
Noi ottenere il valore a lungo utilizzando riferimento Number
.
public static long toLong(Number number){
return number.longValue();
}
Si lavora per tutti i tipi di numero, qui è un test:
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
}
Come su
int myInt = 88;
// non compilerà
Long myLong = myInt;
// compila, e mantiene lo spirito non NULL int. La migliore Cast è non getto a tutti . Naturalmente, il vostro caso d'uso può richiedere valori lunghi e possibili NULL. Ma se l'int o altri anela sono il tuo unico di ingresso, e il metodo possono essere modificati, vorrei suggerire questo approccio.
long myLong = myInt;
// compila, è il modo più efficiente, e rende chiaro che il valore di origine, è e non sarà mai NULL.
Long myLong = (long) myInt;
1,new Long(intValue);
2,Long.valueOf(intValue);
Ho avuto una grande quantità di problemi con questo. Volevo solo:
thisBill.IntervalCount = jPaidCountSpinner.getValue();
Dove IntervalCount è un lungo, e il JSpinner è stato impostato per restituire un lungo. Alla fine ho dovuto scrivere questa funzione:
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;
}
che sembra fare il trucco. Nessuna quantità di semplice fusione, nessuna delle soluzioni di cui sopra ha funzionato per me. Molto frustrante.
//Suppose you have int and you wan to convert it to Long
int i=78;
//convert to Long
Long l=Long.valueOf(i)
Non appena v'è metodo solo Long.valueOf(long)
, gettato da int
a long
sarà fatto implicitamente in caso di utilizzo Long.valueOf(intValue)
.
Il modo più chiaro per farlo è
Integer.valueOf(intValue).longValue()