Pembelajaran Refleksi Java <BR>Yang disebut refleksi dapat dipahami sebagai operasi memperoleh informasi tipe objek selama runtime. Metode pemrograman tradisional mengharuskan pemrogram untuk memutuskan jenis yang akan digunakan pada tahap kompilasi, namun dengan bantuan refleksi, pemrogram dapat memperoleh informasi ini secara dinamis dan menulis kode yang lebih portabel. Sebenarnya refleksi bukanlah suatu fitur dari suatu bahasa pemrograman, karena mekanisme refleksi dapat diimplementasikan dalam bahasa apapun, namun jika bahasa pemrograman itu sendiri mendukung refleksi, maka implementasi refleksi akan jauh lebih nyaman.
1. Mendapatkan kelas tipe <BR>Kita tahu bahwa segala sesuatu di Java adalah sebuah objek, dan objek yang biasa kita gunakan mewarisi secara langsung atau tidak langsung dari kelas Object. Kelas Object berisi metode yang disebut getClass, yang dapat digunakan untuk mendapatkan kelas tipe suatu instance. Kelas tipe mengacu pada kelas yang mewakili suatu tipe, karena semuanya adalah objek, dan tipe tidak terkecuali. Di Java, kelas tipe digunakan untuk mewakili suatu tipe. Semua kelas tipe adalah turunan dari kelas Kelas. Misalnya, berikut adalah potongan kode berikut:
A a = baru A();
if(a.getClass()==A.kelas)
System.out.println("sama");
else System.out.println("tidak setara");
Hasilnya adalah cetakan "sama".
Terlihat bahwa objek a adalah turunan dari A, kelas tertentu dari A. Hasil yang dikembalikan dengan menggunakan a.getClass() dalam pernyataan if sama persis dengan kelas tipe A. Untuk mengekspresikan tipe kelas tipe tertentu di Java, Anda dapat menggunakan metode " Type.class", karena a.getClass() memperoleh kelas tipe A, yaitu A.class, sehingga hasil eksekusi kode di atas adalah mencetak "equal". Catatan khusus adalah bahwa kelas tipe memiliki korespondensi satu-ke-satu. Kelas tipe dari kelas induk dan kelas tipe dari subkelasnya berbeda. Oleh karena itu, dengan asumsi A adalah subkelas dari B, kode berikut akan mendapatkan output "tidak setara":
A a = baru A();
if(a.getClass()==B.kelas)
System.out.println("sama");
else System.out.println("tidak setara");
Jadi, jika Anda mengetahui sebuah instance, Anda bisa mendapatkan kelas tipe dari objek tersebut menggunakan metode "getClass()" dari instance tersebut, dan jika Anda mengetahui suatu tipe, Anda bisa mendapatkan kelas tipe dari tipe tersebut menggunakan metode ".class" .
2. Mendapatkan informasi tipe <BR>Setelah mendapatkan kelas tipe, Anda dapat memanggil beberapa metode untuk mendapatkan informasi tipe. Metode utamanya adalah:
getName():String: Dapatkan nama lengkap tipenya.
getSuperClass():Class: Dapatkan kelas induk langsung dari tipe ini. Jika tipe tersebut tidak memiliki kelas induk langsung, kembalikan null.
getInterfaces():Class[]: Dapatkan semua antarmuka diimplementasikan dengan tipe ini.
isArray():boolean: Menentukan apakah tipenya adalah array.
isEnum():boolean: Tentukan apakah tipe tersebut merupakan tipe enumerasi.
isInterface():boolean: Menentukan apakah tipenya adalah antarmuka.
isPrimitive():boolean: Tentukan apakah tipe tersebut merupakan tipe dasar, yaitu int, boolean, double, dll.
isAssignableFrom(Class cls):boolean: Tentukan apakah tipe ini adalah kelas induk (leluhur) atau antarmuka induk (leluhur) bertipe cls.
getComponentType():Class: Jika tipenya adalah array, mengembalikan tipe komponen array.
Selain itu, operasi seperti konversi tipe juga dapat dilakukan dengan metode utama:
asSubclass(Class clazz):Class: Ubah tipe ini