Class Generik
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 54 dari 87.
Sekarang setelah kamu memahami alasan generic berguna, mari buat generic class sendiri. Generic class mendeklarasikan satu atau beberapa parameter tipe di dalam tanda kurung sudut setelah nama class, yang kemudian dapat digunakan di seluruh class.
class Box<T> {
private T content;
public void set(T content) {
this.content = content;
}
public T get() {
return content;
}
}T adalah parameter tipe: placeholder yang digantikan dengan tipe sebenarnya saat kamu membuat instance. Kamu bisa menggunakan nama apa pun, tetapi huruf kapital tunggal adalah kebiasaan umum: T untuk Type, E untuk Element, K untuk Key, V untuk Value.
Saat membuat instance dari class generik, kamu menentukan tipe sebenarnya di dalam tanda kurung sudut:
Box<String> stringBox = new Box<>();
stringBox.set("Hello");
String value = stringBox.get(); // Tidak perlu konversi tipe
Box<Integer> intBox = new Box<>();
intBox.set(42);
Integer num = intBox.get();Perhatikan <> (operator diamond) di sisi kanan: Java menyimpulkan tipe dari deklarasi. Kamu juga dapat menggunakan beberapa parameter tipe untuk class yang perlu bekerja dengan lebih dari satu tipe:
class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() { return key; }
public V getValue() { return value; }
}
Pair<String, Integer> pair = new Pair<>("age", 25);Tantangan
MudahMari kita buat sistem registrasi hadiah yang menunjukkan keunggulan class generik. Kamu akan membuat sistem penyimpanan fleksibel yang dapat menampung jenis hadiah apa pun, serta registrasi yang memasangkan nama hadiah dengan detailnya menggunakan beberapa parameter tipe.
Kamu akan mengatur kodemu dalam tiga file:
GiftBox.java: Buat class generik yang dapat membungkus jenis hadiah apa pun.GiftBox<T>milikmu harus memiliki field privatitembertipeTdan field privatwrapped(boolean) yang nilai awalnyafalse. Sertakan constructor yang menerima item, methodgetItem()yang mengembalikan item, methodwrap()yang menetapkan wrapped menjadi true, dan methodisWrapped()yang mengembalikan status wrapped. Tambahkan methodgetStatus()yang mengembalikan[item] (wrapped)atau[item] (unwrapped), bergantung pada status wrapped.Registry.java: Buat class generik dengan dua parameter tipe yang memasangkan penerima dengan hadiahnya.Registry<K, V>milikmu harus memiliki field privatrecipientbertipeKdangiftbertipeV. Sertakan constructor yang menerima kedua nilai, method gettergetRecipient()dangetGift(), serta methodgetEntry()yang mengembalikan:[recipient] -> [gift]Main.java: Wujudkan sistem registrasi hadiahmu! Kamu akan menerima tiga input: nama penerima (String), deskripsi hadiah (String), dan nilai hadiah (integer yang menyatakan jumlah dolar).Pertama, buat
GiftBox<String>yang berisi deskripsi hadiah. Bungkus dengan methodwrap(), lalu cetak statusnya.Selanjutnya, buat
GiftBox<Integer>yang berisi nilai hadiah (yang menyatakan jumlah pada kartu hadiah). Jangan bungkus hadiah ini, cetak statusnya untuk menunjukkan bahwa hadiah belum dibungkus.Terakhir, buat
Registry<String, String>yang memasangkan nama penerima dengan deskripsi hadiah, lalu cetak entri registrasinya.
Kamu akan menerima tiga input secara berurutan: nama penerima, deskripsi hadiah, dan nilai hadiah (sebagai integer).
Perhatikan bagaimana class GiftBox yang sama dapat digunakan dengan lancar untuk tipe String dan Integer: itulah keunggulan generik! Class Registry juga menunjukkan bagaimana beberapa parameter tipe memungkinkanmu membuat pasangan fleksibel antara dua tipe apa pun.
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca input
String recipientName = scanner.nextLine();
String giftDescription = scanner.nextLine();
int giftValue = scanner.nextInt();
// TODO: Buat GiftBox<String> yang berisi deskripsi hadiah
// TODO: Bungkus menggunakan method wrap()
// TODO: Tampilkan statusnya menggunakan getStatus()
// TODO: Buat GiftBox<Integer> yang berisi nilai hadiah
// TODO: Jangan bungkus yang ini. Tampilkan statusnya (seharusnya menunjukkan bahwa hadiah belum dibungkus)
// TODO: Buat Registry<String, String> yang memasangkan penerima dengan deskripsi hadiah
// TODO: Tampilkan entri registri menggunakan getEntry()
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online