Question

Je continue à trouver à la fois ici et les gens de Google ayant des problèmes allant de long à int et non l'inverse. Pourtant, je suis sûr que je ne suis pas le seul qui a couru dans ce scénario avant d'aller de int à Long.

Les seules autres réponses que j'ai trouvé étaient « Juste mis aussi longtemps en premier lieu » qui ne répond pas vraiment à la question.

J'ai d'abord essayé casting mais je reçois 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);
}

Comme vous pouvez l'imaginer, je suis un peu perplexe, je suis bloqué à l'aide int depuis un certain contenu vient en tant que ArrayList et l'entité pour laquelle je stocker cette information nécessite le numéro de séquence en tant que longue.

Était-ce utile?

La solution

Notez qu'il ya une différence entre un casting à long et un casting à Long. Si vous lancez à long (une valeur primitive), alors il devrait être automatiquement emballé à un Long (le type de référence qui l'enveloppe).

Vous pouvez également utiliser new pour créer une instance de Long, initialisant avec la valeur int.

Autres conseils

Utilisez les éléments suivants: Long.valueOf(int);.

Si vous avez déjà l'int saisi comme un entier que vous pouvez faire ceci:

Integer y = 1;
long x = y.longValue();

utiliser

new Long(your_integer);

ou

Long.valueOf(your_integer);

J'ai ce petit jouet, qui traite aussi des interfaces non génériques. Je suis OK avec lui jetant un ClassCastException se nourrir mal (OK et heureux)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}

En Java, vous pouvez faire:

 int myInt=4;
 Long myLong= new Long(myInt);

dans votre cas, il serait:

content.setSequence(new Long(i));

Nous obtiendrons la longue valeur à l'aide de référence Number.

public static long toLong(Number number){
    return number.longValue();
}

Il fonctionne pour tous les types de numéros, voici 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

}

A propos de Comment

int myInt = 88;

// ne compilera pas

Long myLong = myInt;

// Compile et conserve l'esprit non NULL d'int. La meilleure Casting ne jetterai du tout . Bien sûr, votre cas d'utilisation peut exiger des valeurs NULL longues et possibles. Mais si l'int, ou d'autres sont languit votre entrée seulement, et votre méthode peut être modifiée, je suggère cette approche.

long myLong = myInt;

// Compile, est le moyen le plus efficace, et il est clair que la valeur source, est et ne sera jamais NULL.

Long myLong = (long) myInt;
 1,new Long(intValue);
 2,Long.valueOf(intValue);

J'ai eu beaucoup de mal avec cela. Je voulais juste:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

Où IntervalCount est longue, et le JSpinner a été fixé pour retourner un long. Finalement, je devais écrire cette fonction:

    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;
}

qui semble faire l'affaire. Aucune quantité de coulée simple, aucune des solutions ci-dessus a fonctionné pour moi. Très frustrant.

 //Suppose you have int and you wan to convert it to Long
 int i=78;
 //convert to Long
 Long l=Long.valueOf(i)

Dès que il n'y a qu'une méthode Long.valueOf(long), fonte de int à long sera fait implicitement en cas d'utilisation Long.valueOf(intValue).

La façon la plus claire pour ce faire est

Integer.valueOf(intValue).longValue()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top