Pertanyaan Manfaat menggunakan kelas wrapper lebih primitif di Jawa


Pada tingkat yang sangat abstrak saya tahu bahwa kelas pembungkus, membuat objek dari tipe data primitif tetapi saya ingin tahu mengapa kita perlu menggunakan kelas wrapper dan manfaat apa yang mereka tawarkan atas tipe data primitif.


5
2017-12-22 01:40


asal


Jawaban:


Koleksi di tempat pertama, misalnya,List<Integer>, Anda tidak bisa menggunakan primitif int sini. Sebenarnya ada kelas / antarmuka generik yang dapat bekerja dengan berbagai jenis objek seperti

public interface Callable<V> {
    V call() throws Exception;
}

Perhatikan bahwa pembungkusan paling baik dilakukan dengan menggunakan bukan Integer baru (i) tetapi Integer.valueOf (i) yang terakhir akan mencoba menggunakan cache. Unwrapping dilakukan sebagai Integer.intValue (). Pembungkusan / pembongkaran primitif ini adalah operasi yang sangat khas sehingga Java 5 memperkenalkan autoboxing / unboxing

List<Integer> list = new ArrayList<>();
list.add(1);
int i = list.get(0);

kode ini secara otomatis diubah oleh compiler Java menjadi

list.add(Integer.valueIf(1));
int i = list.get(0).intValue();    // this is where NullPointerException sometimes happens

7
2017-12-22 01:45



Kelas Wrapper dirancang untuk menambahkan lebih banyak fungsi ke tipe primitif, sehingga mereka kompatibel dengan kode generik, menggunakan Kerangka Koleksi, dan banyak manfaat lainnya. Namun, mereka tidak bermaksud menggantikan tipe primitif.

Jadi, Anda harus menggunakan pembungkus hanya bila diperlukan, seperti ketika berhadapan dengan generik, karena membuat objek menambah overhead yang substansial ke program Anda. Jadi, dalam kasus normal, Anda harus tetap pada primitif.


2
2017-12-22 05:06



Tipe wrapper memungkinkan seorang primitif untuk memegang makna yang lebih kontekstual. Misalnya sebuah bilangan bulat dapat berupa apa saja, sedangkan kelas yang disebut Jam, misalnya, memberikan arti angka di mana pun itu digunakan.

Mereka juga memungkinkan metode yang akan ditulis yang bermutasi primitif tersebut secara konsisten dan jelas kepada konsumen. Silahkan lihat Desain Didorong Domain untuk informasi lebih lanjut tentang hal ini.


1
2017-12-22 01:42



Tipe primitif hanya memegang nilai, kelas pembungkus memberinya nama.

Dengan nama kelas, kompiler dapat melakukan pemeriksaan statis untuk Anda. Itu membuat antarmuka lebih bermakna. Dan Anda juga dapat mendefinisikan beberapa metode dalam kelas pembungkus untuk memvalidasi nilai primitif.

Biasanya, untuk proyek kecil, saya pikir menggunakan tipe primitif baik-baik saja.


0
2017-12-22 01:50



Benda Wrapper adalah benda normal dan referensi bisa ada null. Ini memungkinkan penggunaan status "tidak disetel" yang tidak mungkin dilakukan dengan primitif.

Integer no = null;    // not set

Anda harus menggunakan nilai ajaib seperti -1 untuk menunjukkan bahwa variabel primitif "tidak disetel".


0
2018-06-11 05:28



Bayangkan saja: Anda bermain game di mana Anda perlu menyimpan status dan Anda ingin bermain di komputer yang berbeda (game yang sama) kemudian Anda memutuskan untuk mengambil status (level) ke komputer lain kemudian Anda dapat melanjutkan dari keadaan itu (bukan dari awal) .. Oke datang ke pertanyaan jika status senjata Anda saat ini adalah 3. seperti {int weapons = 1; jika (Anda menambahkan senjata dengan memainkan beberapa level oke sekarang ini 3)} tetapi Anda tidak dapat menyimpannya sebagai objek karena primitif berbeda. (hidup dalam tumpukan). jadi Anda perlu senjata sebagai objek ((solusi: buat Objek Integer)) Senjata Integer = Integer baru (1) {...}


0