Ich finde immer wieder sowohl bei Google als auch bei Google, dass es Probleme gibt, die von long
zu int
gehen, und nicht umgekehrt. Ich bin mir jedoch sicher, dass ich nicht der einzige bin, der dieses Szenario kennt, bevor er von int
zu Long
wechselt.
Die einzigen anderen Antworten, die ich gefunden habe, waren "Setzen Sie es einfach nur so lange", was die Frage wirklich nicht anspricht.
Kann mir hier jemand helfen? Ich habe anfangs versucht, aber ich bekomme einen "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, dass ich etwas ratlos bin, verwende ich int, da einige Inhalte als ArrayList erscheinen und die Entität, für die ich diese Informationen speichere, die Sequenznummer als Long benötigt.
Vielen Dank!
Beachten Sie, dass es einen Unterschied zwischen einer Umwandlung in long
und einer Umwandlung in Long
gibt. Wenn Sie in long
(einen primitiven Wert) umwandeln, sollte er automatisch in eine Long
(den Verweistyp, der ihn umschließt) gesetzt werden.
Sie können alternativ new
verwenden, um eine Instanz von Long
zu erstellen und sie mit dem Wert int
zu initialisieren.
Verwenden Sie Folgendes: Long.valueOf(int);
.
Wenn Sie den int bereits als Integer eingegeben haben, können Sie Folgendes tun
Integer y = 1;
long x = y.longValue();
benutzen
new Long(your_integer);
oder
Long.valueOf(your_integer);
Ich habe dieses kleine Spielzeug, das sich auch mit nicht generischen Schnittstellen befasst ... Ich bin damit einverstanden, eine ClassCastException auszulösen, wenn der Feed falsch ist
public class TypeUtil {
public static long castToLong(Object o) {
Number n = (Number) o;
return n.longValue();
}
}
In Java können Sie Folgendes tun:
int myInt=4;
Long myLong= new Long(myInt);
in Ihrem Fall wäre es:
content.setSequence(new Long(i));
Wie wäre es mit
int myInt = 88;
// Wird nicht kompiliert
Long myLong = myInt;
// Kompiliert und behält den Nicht-NULL-Geist von int. Die besten Besetzung ist überhaupt keine Besetzung . Natürlich kann Ihr Anwendungsfall Long-Werte und mögliche NULL-Werte erfordern. Wenn das int oder die anderen longs Ihre einzige Eingabe sind und Ihre Methode geändert werden kann, würde ich diesen Ansatz vorschlagen.
long myLong = myInt;
// Kompiliert ist die effizienteste Methode und macht deutlich, dass der Quellwert NULL ist und niemals sein wird.
Long myLong = (long) myInt;
1,new Long(intValue);
2,Long.valueOf(intValue);
Wir erhalten den langen Wert mit Number
.
public static long toLong(Number number){
return number.longValue();
}
Es funktioniert für alle Nummernarten, 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
}
//Suppose you have int and you wan to convert it to Long
int i=78;
//convert to Long
Long l=Long.valueOf(i)
Ich hatte große Probleme damit. Ich wollte nur:
thisBill.IntervalCount = jPaidCountSpinner.getValue();
Wobei IntervalCount ein Long ist und der JSpinner so eingestellt wurde, dass er einen Long zurückgibt. Irgendwann musste 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;
}
das scheint den Trick zu tun. Kein einfaches Gießen, keine der oben genannten Lösungen funktionierte für mich. Sehr frustrierend.
Sobald es nur die Methode Long.valueOf(long)
gibt, wird die Umwandlung von int
in long
implizit durchgeführt, wenn Long.valueOf(intValue)
verwendet wird.
Der klarere Weg, dies zu tun, ist
Integer.valueOf(intValue).longValue()