Frage

ich beide immer wieder zu finden, hier und Google Menschen, die Probleme von long geht um in die andere Richtung zu int und nicht. Aber ich bin sicher, ich bin nicht der einzige, der in diesem Szenario ausgeführt wurde, bevor von int zu Long gehen.

Die einzigen anderen Antworten, die ich gefunden habe, wurden „es einfach so lange gesetzt, an erster Stelle“, die wirklich nicht die Frage befassen.

ich zunächst versucht, Casting, aber ich erhalte eine "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);
}

Wie Sie sich vorstellen können, ich bin ein wenig verwirrt, ich bin mit int stecken, da einige Inhalte als ArrayList kommen in und das Unternehmen, für die ich diese Info bin Speicherung erfordert die Sequenznummer als Long.

War es hilfreich?

Lösung

Beachten Sie, dass es einen Unterschied zwischen einer Besetzung long und einer Besetzung Long. Wenn Sie (Grundwert) long werfen dann sollte es automatisch zu einem Long boxed (der Referenz-Typ, die es umschließt).

Sie können alternativ new eine Instanz von Long zu schaffen, mit dem int Wert initialisiert wird.

Andere Tipps

Verwenden Sie die folgenden Schritte aus: Long.valueOf(int); .

Wenn Sie bereits die int eingegeben als Integer Sie dies tun können:

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

verwenden

new Long(your_integer);

oder

Long.valueOf(your_integer);

Ich habe dieses kleine Spielzeug, das auch mit nicht generischen Schnittstellen befaßt. Ich bin OK mit ihm eine Classcast wenn füttert falsch (OK und glücklich)

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

In Java können Sie tun:

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

in Ihrem Fall wäre es:

content.setSequence(new Long(i));

Wir werden den Long-Wert erhalten, indem Number Referenz.

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

Es funktioniert für alle Nummerntypen, hier ist ein 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

}

Wie über

int myInt = 88;

// Wird nicht kompilieren

Long myLong = myInt;

// Compiliert, und behält sich das Nicht-NULL Geist der int. Die beste Besetzung ist keine Besetzung überhaupt . Natürlich Lange und mögliche NULL-Werte kann Ihr Anwendungsfall benötigen. Aber wenn der int oder andere sehnt Ihr nur eingegeben werden, und Ihre Methode kann geändert werden, würde ich diesen Ansatz vor.

long myLong = myInt;

// Compiliert, ist der effizienteste Weg, und macht deutlich, dass der Quellenwert, ist und wird niemals NULL sein.

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

Ich hatte einen sehr viel Mühe mit diesem. Ich wollte nur:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

Wo IntervalCount ein lang ist, und die JSpinner eingestellt war eine lange zurückzukehren. Schließlich hatte ich diese Funktion schreiben:

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

, die scheint, den Trick zu tun. Keine Menge von einfachen Gießen, keine der oben genannten Lösungen für mich gearbeitet. Sehr frustrierend.

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

Sobald es nur Verfahren Long.valueOf(long), von int gegossen wird long implizit im Fall der Verwendung Long.valueOf(intValue) erfolgen.

Je klarer Weg, dies zu tun ist,

Integer.valueOf(intValue).longValue()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top