pilihan kata-kata Anda untuk pertanyaan Anda membingungkan, dapatkah Anda mengklarifikasi? Dan tepatnya apa yang tidak berfungsi, dapatkah Anda memposting kode?
Anthony Forloney
Jawaban:
203
Anda tidak bisa menggunakan tipe primitif sebagai argumen umum di Java. Gunakan sebaliknya:
Dengan auto-boxing / unboxing ada sedikit perbedaan dalam kode. Tinju otomatis berarti Anda dapat menulis:
myMap.put("foo",3);
dari pada:
myMap.put("foo",newInteger(3));
Auto-boxing berarti versi pertama secara implisit dikonversi ke versi kedua. Buka kotak otomatis berarti Anda dapat menulis:
int i = myMap.get("foo");
dari pada:
int i = myMap.get("foo").intValue();
Panggilan implisit ke intValue()berarti jika kunci tidak ditemukan itu akan menghasilkan NullPointerException, misalnya:
int i = myMap.get("bar");// NullPointerException
Alasannya adalah tipe erasure . Tidak seperti, katakanlah, dalam C # tipe generik tidak dipertahankan saat runtime. Mereka hanya "gula sintaksis" untuk casting eksplisit untuk menghemat Anda melakukan ini:
Contoh terakhir Anda tidak berfungsi: Tidak dapat melakukan cast dari Map <String, Integer> ke Map <Integer, String>
T3rm1
mempertimbangkan setiap kode yang terpisah di baris baru, kode pada baris 5 harus terlebih dahulu dilemparkan ke Integer sebelum menggunakan metode intValue () karena dianggap sebagai objek ketika Anda menggunakan metode get ().
int adalah tipe primitif, Anda bisa membaca apa artinya tipe primitif di java di sini , dan Peta adalah antarmuka yang memiliki objek sebagai input:
publicinterfaceMap<K extendsObject, V extendsObject>
objek berarti kelas, dan itu juga berarti bahwa Anda dapat membuat kelas lain yang keluar darinya, tetapi Anda tidak bisa membuat kelas yang keluar dari int. Jadi Anda tidak bisa menggunakan variabel int sebagai objek. Saya punya solusi untuk masalah Anda:
Map<String,Integer> map =newHashMap<>();
atau
Map<String,int[]> map =newHashMap<>();int x =1;//put x in mapint[] x_ =newint[]{x};
map.put("x", x_);//get the value of xint y = map.get("x")[0];
Jawaban:
Anda tidak bisa menggunakan tipe primitif sebagai argumen umum di Java. Gunakan sebaliknya:
Dengan auto-boxing / unboxing ada sedikit perbedaan dalam kode. Tinju otomatis berarti Anda dapat menulis:
dari pada:
Auto-boxing berarti versi pertama secara implisit dikonversi ke versi kedua. Buka kotak otomatis berarti Anda dapat menulis:
dari pada:
Panggilan implisit ke
intValue()
berarti jika kunci tidak ditemukan itu akan menghasilkanNullPointerException
, misalnya:Alasannya adalah tipe erasure . Tidak seperti, katakanlah, dalam C # tipe generik tidak dipertahankan saat runtime. Mereka hanya "gula sintaksis" untuk casting eksplisit untuk menghemat Anda melakukan ini:
Sebagai contoh, kode ini legal:
sumber
GNU Trove mendukung ini tetapi tidak menggunakan obat generik. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
sumber
Anda tidak dapat menggunakan tipe primitif di
HashMap
.int
, ataudouble
tidak bekerja. Anda harus menggunakan tipe penutupnya. sebagai contohSekarang keduanya adalah objek, jadi ini akan berhasil.
sumber
int adalah tipe primitif, Anda bisa membaca apa artinya tipe primitif di java di sini , dan Peta adalah antarmuka yang memiliki objek sebagai input:
objek berarti kelas, dan itu juga berarti bahwa Anda dapat membuat kelas lain yang keluar darinya, tetapi Anda tidak bisa membuat kelas yang keluar dari int. Jadi Anda tidak bisa menggunakan variabel int sebagai objek. Saya punya solusi untuk masalah Anda:
atau
sumber
Anda dapat menggunakan tipe referensi dalam argumen umum, bukan tipe primitif. Jadi di sini Anda harus menggunakannya
dan menyimpan nilai sebagai
sumber