Aku terus mencari baik di sini dan Google orang-orang yang memiliki masalah pergi dari lama
untuk int
dan bukan sebaliknya. Namun saya'm yakin aku'm bukan satu-satunya yang telah mengalami skenario ini sebelum pergi dari int
untuk Lama
.
Satu-satunya jawaban yang saya've ditemukan "Hanya mengatur lebih Lama di tempat pertama" yang benar-benar doesn't menjawab pertanyaan.
Awalnya saya mencoba casting tapi saya mendapatkan "Tidak cast dari int ke Long
"
for (int i = 0; i < myArrayList.size(); ++i ) {
content = new Content();
content.setDescription(myArrayList.get(i));
content.setSequence((Long) i);
session.save(content);
}
Seperti yang dapat anda bayangkan I'm sedikit bingung, aku'm terjebak menggunakan int
sejak beberapa konten akan datang sebagai ArrayList
dan entitas yang saya'm menyimpan info ini membutuhkan nomor urut seperti yang Lama.
Perhatikan bahwa ada perbedaan antara pemain untuk lama
dan melemparkan ke Lama
. Jika anda dilemparkan ke lama
(primitif nilai) maka harus secara otomatis kotak yang Lama
(referensi jenis yang membungkus itu).
Anda bisa atau menggunakan new
untuk membuat sebuah instance dari Lama
, memulainya dengan int
nilai.
Aku punya mainan kecil ini, yang juga berkaitan dengan non generik interface. I'm OK dengan itu melemparkan ClassCastException jika pakan yang salah (OK dan bahagia)
public class TypeUtil {
public static long castToLong(Object o) {
Number n = (Number) o;
return n.longValue();
}
}
Bagaimana
int myInt = 88;
// Tidak akan di compile
Long myLong = myInt;
// Mengkompilasi, dan mempertahankan non-NULL semangat int. Terbaik cast adalah tidak ada pemain di semua. Tentu saja, kasus penggunaan anda mungkin memerlukan Panjang dan mungkin nilai-nilai NULL. Tapi jika int, atau rindu yang anda hanya input, dan metode yang dapat dimodifikasi, saya akan menyarankan pendekatan ini.
long myLong = myInt;
// Mengkompilasi, adalah cara yang paling efisien, dan membuat jelas bahwa sumber nilai, dan tidak akan pernah menjadi NULL.
Long myLong = (long) myInt;
Kita akan mendapatkan nilai panjang dengan menggunakan Nomor
referensi.
public static long toLong(Number number){
return number.longValue();
}
Ini bekerja untuk semua jenis nomor, di sini adalah tes yang:
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
}
Saya punya banyak masalah dengan hal ini. Aku hanya ingin:
thisBill.IntervalCount = jPaidCountSpinner.getValue();
Di mana IntervalCount Panjang, dan JSpinner ditetapkan untuk kembali Panjang. Akhirnya saya harus menulis fungsi ini:
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;
}
yang tampaknya untuk melakukan trik. Tidak ada jumlah sederhana casting, tidak ada solusi di atas bekerja untuk saya. Sangat frustasi.