Panduan untuk Operator Berlian di Jawa

1. Gambaran keseluruhan

Dalam artikel ini, kita akan melihat pengendali berlian di Java dan bagaimana generik dan API Koleksi mempengaruhi evolusinya .

2. Jenis Mentah

Sebelum Java 1.5, API Koleksi hanya menyokong jenis mentah - tidak ada cara untuk argumen jenis dapat diukur ketika membuat koleksi:

List cars = new ArrayList(); cars.add(new Object()); cars.add("car"); cars.add(new Integer(1));

Ini membolehkan sebarang jenis ditambahkan dan membawa kepada pengecualian casting yang berpotensi pada waktu runtime .

3. Generik

Di Java 1.5, Generik diperkenalkan - yang memungkinkan kami untuk memformat argumen jenis untuk kelas , termasuk yang ada di Koleksi API - ketika menyatakan dan membina objek:

List cars = new ArrayList();

Pada ketika ini, kita harus menentukan jenis parameter dalam konstruktor , yang agak tidak dapat dibaca:

Map
    
     >> cars = new HashMap
     
      >>();
     
    

Alasan untuk pendekatan ini adalah bahawa jenis mentah masih ada demi keserasian kebelakang , jadi penyusun perlu membezakan antara jenis mentah dan generik ini:

List generics = new ArrayList(); List raws = new ArrayList();

Walaupun penyusun masih membenarkan kami menggunakan jenis mentah dalam konstruktor, ia akan meminta kami dengan pesanan amaran:

ArrayList is a raw type. References to generic type ArrayList should be parameterized

4. Operator Berlian

Pengendali berlian - diperkenalkan di Java 1.7 - menambahkan inferens jenis dan mengurangkan ketumpatan dalam tugas - ketika menggunakan generik :

List cars = new ArrayList();

Ciri inferens jenis penyusun Java 1.7 menentukan deklarasi konstruktor yang paling sesuai yang sesuai dengan pemanggilan .

Pertimbangkan antara muka dan hierarki kelas berikut untuk bekerja dengan kenderaan dan enjin:

public interface Engine { } public class Diesel implements Engine { } public interface Vehicle { } public class Car implements Vehicle { }

Mari buat contoh baru Kereta menggunakan pengendali berlian:

Car myCar = new Car();

Secara dalaman, penyusun tahu bahawa Diesel menggunakan antara muka Engine dan kemudian dapat menentukan konstruktor yang sesuai dengan menyimpulkan jenisnya.

5. Kesimpulan

Ringkasnya, pengendali berlian menambah ciri inferens jenis ke penyusun dan mengurangkan ketajaman dalam tugasan yang diperkenalkan dengan generik.

Beberapa contoh tutorial ini boleh didapati di projek GitHub, jadi jangan ragu untuk memuat turunnya dan bermain dengannya.