Java - Inner Class Diamond Operator

Hai, para pemrogram Java yang sedang belajar! Hari ini, kita akan mendalamkan sebuah topik yang mungkin terdengar menakutkan pada awalnya, tapi saya berjanji Anda akan menemukannya menarik sekali kita merobahnya. Kita akan membahas Operator Diamond Kelas Inner Java. Jangan khawatir jika kata-kata ini terdengar sepertiongkos-ongkos saat ini - pada akhir pelajaran ini, Anda akan bisa menggunagunakan alat kuat ini seperti seorang ahli!

Java - Inner Class Diamond Operator

Apa Itu Kelas Inner?

Sebelum kita masuk ke operator diamond, mari kita mulai dari dasar. Kelas inner adalah kelas yang didefinisikan dalam kelas lain. Itu seperti memiliki sebuah kotak kecil didalam kotak besar. Kelas inner memiliki akses ke semua anggota kelas luar, bahkan yang private. Keren, kan?

Ini adalah contoh sederhana:

public class OuterClass {
private int outerField = 10;

class InnerClass {
void printOuterField() {
System.out.println("Nilai field luar: " + outerField);
}
}
}

Dalam contoh ini, InnerClass disembunyikan dalam OuterClass dan dapat mengakses outerField secara langsung.

Apa Itu Operator Diamond?

Sekarang, mari kita bicara tentang bintang utama pertunjukan kita - Operator Diamond (<>). Operator kecil ini diperkenalkan di Java 7 untuk membuat hidup kita mudah saat bekerja dengan tipe generik. Dia dinamai "operator diamond" karena... well, dia seperti permata! ?

Operator diamond memungkinkan kita untuk mengabaikan argumen tipe saat kompiler dapat menginfersinya secara otomatis. Itu seperti memiliki seorang teman cerdas yang menyelesaikan kalimat Anda dengan benar setiap kali!

mari kita lihatnya dalam aksi:

// Sebelum Java 7
List<String> myList = new ArrayList<String>();

// Dengan Operator Diamond (Java 7 dan setelahnya)
List<String> myList = new ArrayList<>();

Lihat bagaimana kita tidak perlu mengulangi <String> di baris kedua? Itu keajaiban operator diamond!

Operator Diamond dengan Kelas Inner

Sekarang, mari kita gabungkan apa yang kita pelajari tentang kelas inner dan operator diamond. Ini adalah tempat yang benar-benar menarik!

public class OuterClass {
class InnerClass<T> {
T value;
InnerClass(T value) {
this.value = value;
}
}

public void createInner() {
// Sebelum Java 9
InnerClass<String> inner1 = this.new InnerClass<String>("Hello");

// Java 9 dan setelahnya
InnerClass<String> inner2 = this.new InnerClass<>("Hello");
}
}

Dalam contoh ini, kita memiliki kelas inner generik. Sebelum Java 9, kita harus menentukan argumen tipe dua kali saat membuat instance kelas inner. Tetapi dari Java 9 keatas, kita dapat menggunakan operator diamond untuk membuat kode kita lebih bersih dan ringkas.

Operator Diamond dalam Kelas Anonim

Operator diamond menjadi lebih kuat saat digunakan dengan kelas anonim. Kelas anonim seperti kelas inner untuk penggunaan satu kali yang kita definisikan dan instancekan pada saat yang sama. Itu sempurna untuk saat Anda memerlukan implementasi cepat dan penggunaan sekali dari suatu interface atau kelas abstrak.

mari kita lihat contoh:

interface Greeting {
void greet();
}

public class DiamondOperatorDemo {
public static void main(String[] args) {
// Sebelum Java 9
Greeting greeting1 = new Greeting<String>() {
@Override
public void greet() {
System.out.println("Hello, World!");
}
};

// Java 9 dan setelahnya
Greeting greeting2 = new Greeting<>() {
@Override
public void greet() {
System.out.println("Hello, World!");
}
};

greeting1.greet();
greeting2.greet();
}
}

Dalam contoh ini, kita membuat kelas anonim yang mengimplementasikan interface Greeting. Dengan Java 9 dan setelahnya, kita dapat menggunakan operator diamond untuk membuat kode kita lebih bersih.

Evolusi Operator Diamond

Operator diamond telah berkembang selama versi Java yang berbeda. Mari kitaambil sebuah tur singkat:

Java 7

Java 7 memperkenalkan operator diamond, tetapi dia hanya bisa digunakan dengan kelas konkrit.

List<String> list = new ArrayList<>();  // Ini berjalan
Map<String, List<String>> map = new HashMap<>();  // Ini juga berjalan

Java 8

Java 8 tidak membawa perubahan signifikan terhadap operator diamond.

Java 9 dan Setelahnya

Java 9 memperluas penggunaan operator diamond ke kelas anonim, seperti yang kita lihat dalam contoh sebelumnya. Hal ini membuat kode lebih ringkas dan mudah dibaca.

// Ini sekarang berjalan di Java 9+
Comparator<String> comparator = new Comparator<>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
};

Aplikasi Praktis

Sekarang kita mengerti operator diamond, mari kita lihat beberapa aplikasi praktis. Bayangkan Anda sedang membuat sistem inventori game:

public class GameInventory {
class Item<T> {
private String name;
private T value;

Item(String name, T value) {
this.name = name;
this.value = value;
}

// getters dan setters...
}

public void addItem() {
// Sebelum Java 9
Item<Integer> sword = this.new Item<Integer>("Sword", 100);

// Java 9 dan setelahnya
Item<Integer> shield = this.new Item<>("Shield", 50);

System.out.println("Ditambahkan: " + sword.name + " dengan nilai " + sword.value);
System.out.println("Ditambahkan: " + shield.name + " dengan nilai " + shield.value);
}
}

Dalam contoh ini, kita menggunakan operator diamond untuk membuat instance kelas inner Item. Ini membuat kode kita lebih bersih dan mudah dibaca, khususnya saat berurusan dengan tipe generik yang kompleks.

Kesimpulan

Dan di sana Anda punya nya, teman-teman! Kita telah berpergian melalui dunia kelas inner dan operator diamond. Dari permulaannya di Java 7 ke kemampuannya yang diperluas di Java 9 dan setelahnya, operator diamond telah menjadi alat tak terpisahkan dalam peralatan pemrogram Java.

Ingat, tujuan fitur seperti operator diamond adalah untuk membuat kode kita lebih mudah dibaca dan dipelihara. Itu bukan tentang mengetik lebih sedikit (meskipun itu adalah bonus yang bagus!), tetapi tentang mengungkapkan kehendak kita lebih jelas.

Saat Anda terus melanjutkan perjalanan Java Anda, tetap pantau kesempatan untuk menggunakan operator diamond. Itu adalah perbaikan kecil yang, seiring waktu, membuat Anda menjadi pemrogram yang lebih efisien dan efektif.

Selamat coding, dan may your diamonds always sparkle! ?✨

Credits: Image by storyset