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.

È stato utile?

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top