Java Tutorial API Refleksi dengan Contoh
⚡ Ringkasan Cerdas
Java API Refleksi menganalisis dan memodifikasi kemampuan suatu kelas saat runtime, termasuk field, method, dan constructor-nya. Sumber daya ini menjelaskan paket java.lang.reflect, metode-metode utama dari java.lang.Class, dan empat contoh yang membaca metadata dari suatu kelas, variabel, method, dan constructor.

Apa yang dimaksud dengan Refleksi Java?
Java Refleksi adalah proses menganalisis dan memodifikasi semua kemampuan suatu kelas saat runtime. API Refleksi di Java Digunakan untuk memanipulasi sebuah kelas dan anggotanya, yang meliputi field, method, constructor, dll., pada saat runtime.
Salah satu keunggulan API Refleksi adalah Java yaitu, ia juga dapat memanipulasi anggota privat dari kelas tersebut.
Paket java.lang.reflect menyediakan banyak kelas untuk mengimplementasikan refleksi. Metode-metode dari kelas java.lang.Class digunakan untuk mengumpulkan metadata lengkap dari kelas tertentu.
Kelas dalam Paket java.lang.reflect
Berikut ini adalah daftar berbagai Java kelas-kelas di dalam paket java.lang.reflect untuk mengimplementasikan refleksi:
- Bidang: Kelas ini digunakan untuk mengumpulkan informasi deklaratif seperti tipe data, pengubah akses, nama, dan nilai suatu variabel.
- Metode: Kelas ini digunakan untuk mengumpulkan informasi deklaratif seperti pengubah akses, tipe pengembalian, nama, tipe parameter, dan tipe pengecualian dari suatu metode.
- Pembina: Kelas ini digunakan untuk mengumpulkan informasi deklaratif seperti pengubah akses, nama, dan tipe parameter dari sebuah konstruktor.
- Pengubah: Kelas ini digunakan untuk mengumpulkan informasi tentang pengubah akses tertentu.
Metode yang digunakan di java.lang.Class
- String publik getName(): Mengembalikan nama kelas.
- Kelas publik getSuperclass(): Mengembalikan referensi kelas induk.
- public Class[] getInterfaces(): Mengembalikan array antarmuka yang diimplementasikan oleh kelas yang ditentukan.
- publik int getModifiers(): Mengembalikan nilai integer yang mewakili pengubah (modifier) dari kelas yang ditentukan, yang perlu diteruskan sebagai parameter ke metode “public static String toString(int i)” yang mengembalikan penentu akses (access specifier) untuk kelas yang diberikan.
Cara mendapatkan informasi lengkap tentang suatu kelas
Untuk mendapatkan informasi tentang variabelUntuk mengakses metode dan konstruktor suatu kelas, kita perlu membuat objek dari kelas tersebut. Contoh berikut menunjukkan berbagai cara untuk membuat objek dari kelas “Class”:
public class Guru99ClassObjectCreation { public static void main(String[] args) throws ClassNotFoundException { // 1 - By using Class.forName() method Class c1 = Class.forName("Guru99ClassObjectCreation"); // 2 - By using getClass() method Guru99ClassObjectCreation guru99Obj = new Guru99ClassObjectCreation(); Class c2 = guru99Obj.getClass(); // 3 - By using .class Class c3 = Guru99ClassObjectCreation.class; } }
Contoh 1: Cara mendapatkan Metadata Kelas
Contoh berikut menunjukkan cara mendapatkan metadata seperti nama kelas, nama kelas induk, antarmuka yang diimplementasikan, dan pengubah akses dari suatu kelas.
Kita akan mendapatkan metadata dari kelas di bawah ini yang bernama Guru99Base.class:
import java.io.Serializable; public abstract class Guru99Base implements Serializable, Cloneable { }
- Nama kelasnya adalah: Guru99 Basis
- Pengubah aksesnya adalah: public dan abs.tract
- Ini telah mengimplementasikan antarmuka: Serializable dan Cloneable
- Karena tidak mewarisi kelas apa pun secara eksplisit, kelas induknya adalah: java.lang.Object
Kelas di bawah ini akan mendapatkan metadata dari Guru99Base.class dan cetaklah:
import java.lang.reflect.Modifier; public class Guru99GetclassMetaData { public static void main(String[] args) throws ClassNotFoundException { // Create Class object for Guru99Base.class Class<Guru99Base> guru99ClassObj = Guru99Base.class; // Print name of the class System.out.println("Name of the class is : " + guru99ClassObj.getName()); // Print super class name System.out.println("Name of the super class is : " + guru99ClassObj.getSuperclass().getName()); // Get the list of implemented interfaces using getInterfaces() method Class[] guru99InterfaceList = guru99ClassObj.getInterfaces(); // Print the implemented interfaces using a for-each loop System.out.print("Implemented interfaces are : "); for (Class guru99class1 : guru99InterfaceList) { System.out.print(guru99class1.getName() + " "); } System.out.println(); // Get access modifiers using getModifiers() and Modifier.toString() int guru99AccessModifier = guru99ClassObj.getModifiers(); System.out.println("Access modifiers of the class are : " + Modifier.toString(guru99AccessModifier)); } }
- Cetak nama kelas menggunakan metode getName().
- Cetak nama kelas induk menggunakan metode getSuperclass().getName().
- Cetak nama-nama antarmuka yang telah diimplementasikan.
- Cetak pengubah akses yang digunakan oleh kelas tersebut.
Contoh 2: Cara mendapatkan Metadata Variabel
Contoh berikut menunjukkan cara mendapatkan metadata dari sebuah variabel.
Di sini, kita membuat sebuah kelas bernama Guru99VariableMetaData.class dengan beberapa variabel:
package guru; public class Guru99VariableMetaData { public static int guru99IntVar1 = 1111; static int guru99IntVar2 = 2222; static String guru99StringVar1 = "guru99.com"; static String guru99StringVar2 = "Learning Reflection API"; }
Langkah-langkah untuk mendapatkan metadata tentang variabel pada kelas di atas:
- Buat objek kelas dari kelas di atas, yaitu, Guru99VariableMetaData.class, seperti di bawah ini:
Guru99VariableMetaData guru99ClassVar = new Guru99VariableMetaData(); Class guru99ClassObjVar = guru99ClassVar.getClass();
- Dapatkan metadata dalam bentuk array Field menggunakan dapatkan Bidang() or dapatkanDeclaredFields() metode seperti di bawah ini:
Field[] guru99Field1 = guru99ClassObjVar.getFields(); Field[] guru99Field2 = guru99ClassObjVar.getDeclaredFields();
The dapatkan Bidang() Metode ini mengembalikan metadata variabel publik dari kelas yang ditentukan serta dari kelas induknya.
The dapatkanDeclaredFields() Metode ini hanya mengembalikan metadata dari semua variabel dari kelas yang ditentukan.
- Dapatkan nama variabel menggunakan metode “public String getName()”.
- Dapatkan tipe data variabel menggunakan metode “public Class getType()”.
- Dapatkan nilai variabel menggunakan metode “public xxx get(Field)”. Di sini, xxx bisa berupa byte, short, atau tipe nilai apa pun yang ingin kita ambil.
- Dapatkan pengubah akses variabel menggunakan metode getModifiers() dan Modifier.toString(int i).
Di sini, kita menulis sebuah kelas untuk mendapatkan metadata dari variabel-variabel yang ada di dalam kelas tersebut. Guru99VariableMetaData.class:
package guru; import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class Guru99VariableMetaDataTest { public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException { // Create Class object for Guru99VariableMetaData.class Guru99VariableMetaData guru99ClassVar = new Guru99VariableMetaData(); Class guru99ClassObjVar = guru99ClassVar.getClass(); // Get the metadata of all the fields of the class Field[] guru99Field1 = guru99ClassObjVar.getDeclaredFields(); // Print name, data types, access modifiers and values of the variables for (Field field : guru99Field1) { System.out.println("Variable name : " + field.getName()); System.out.println("Datatype of the variable : " + field.getType()); int guru99AccessModifiers = field.getModifiers(); System.out.println("Access Modifiers of the variable : " + Modifier.toString(guru99AccessModifiers)); System.out.println("Value of the variable : " + field.get(guru99ClassVar)); System.out.println(); } } }
- Membuat objek kelas untuk Guru99VariableMetaData.class.
- Semua metadata variabel telah diperoleh dalam sebuah array Field.
- Mencetak semua nama variabel dalam kelas. Guru99VariableMetaData.class.
- Mencetak semua tipe data variabel dalam kelas tersebut.
- Mencetak semua pengubah akses variabel dalam kelas tersebut.
- Mencetak nilai semua variabel dalam kelas.
Contoh 3: Cara mendapatkan Metadata Metode
Contoh berikut menunjukkan cara mendapatkan metadata dari sebuah metode.
Di sini, kita membuat sebuah kelas bernama Guru99MethodMetaData.class dengan beberapa metode:
package guru; import java.sql.SQLException; public class Guru99MethodMetaData { public void guru99Add(int firstElement, int secondElement, String result) throws ClassNotFoundException, ClassCastException { System.out.println("Demo method for Reflection API"); } public String guru99Search(String searchString) throws ArithmeticException, InterruptedException { System.out.println("Demo method for Reflection API"); return null; } public void guru99Delete(String deleteString) throws SQLException { System.out.println("Demo method for Reflection API"); } }
Langkah-langkah untuk mendapatkan metadata tentang metode-metode dalam kelas di atas:
- Buat objek kelas dari kelas di atas, yaitu, Guru99MethodMetaData.class, seperti di bawah ini:
Guru99MethodMetaData guru99ClassVar = new Guru99MethodMetaData(); Class guru99ClassObjVar = guru99ClassVar.getClass();
- Dapatkan informasi metode dalam array Metode menggunakan metode getMethods() dan getDeclaredMethods() seperti di bawah ini:
Method[] guru99Method1 = guru99ClassObjVar.getMethods(); Method[] guru99Method2 = guru99ClassObjVar.getDeclaredMethods();
The dapatkanMetode() Metode ini mengembalikan metadata dari metode publik dari kelas yang ditentukan serta dari kelas induknya. dapatkan Metode Deklarasi() Metode ini hanya mengembalikan metadata dari semua metode yang terdapat dalam kelas yang ditentukan.
- Dapatkan nama metode menggunakan getName () Metode.
- Dapatkan tipe kembalian dari metode tersebut menggunakan dapatkanReturnType() Metode.
- Dapatkan pengubah akses dari metode menggunakan getModifier() ke Pengubah.toString(int i) metode.
- Dapatkan tipe parameter metode menggunakan dapatkanParameterTypes() metode, yang mengembalikan array Kelas.
- Dapatkan pengecualian yang dilemparkan menggunakan getExceptionType() metode, yang mengembalikan array Kelas.
Di sini, kita menulis sebuah kelas untuk mendapatkan metadata dari metode-metode yang ada di dalam kelas tersebut. Guru99MethodMetaData.class:
package guru; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class Guru99MethodMetaDataTest { public static void main(String[] args) { // Create Class object for Guru99MethodMetaData.class Class guru99ClassObj = Guru99MethodMetaData.class; // Get the metadata of all the methods using getDeclaredMethods() Method[] guru99Methods = guru99ClassObj.getDeclaredMethods(); for (Method method : guru99Methods) { System.out.println("Name of the method : " + method.getName()); System.out.println("Return type of the method : " + method.getReturnType()); int guru99ModifierList = method.getModifiers(); System.out.println("Method access modifiers : " + Modifier.toString(guru99ModifierList)); Class[] guru99ParamList = method.getParameterTypes(); System.out.print("Method parameter types : "); for (Class class1 : guru99ParamList) { System.out.print(class1.getName() + " "); } System.out.println(); Class[] guru99ExceptionList = method.getExceptionTypes(); System.out.print("Exception thrown by method : "); for (Class class1 : guru99ExceptionList) { System.out.print(class1.getName() + " "); } System.out.println(); } } }
- Membuat objek kelas untuk Guru99MethodMetaData.class.
- Mendapatkan semua metadata dari semua metode dalam array Metode.
- Mencetak semua nama metode yang ada di dalam kelas.
- Mencetak tipe nilai kembalian dari metode-metode dalam kelas tersebut.
- Mencetak semua pengubah akses dari metode-metode dalam kelas tersebut.
- Mencetak tipe parameter dari metode-metode tersebut.
- Mencetak pengecualian yang dilemparkan oleh metode-metode tersebut.
Contoh 4: Cara mendapatkan Metadata Konstruktor
Contoh berikut menunjukkan cara mendapatkan metadata dari konstruktor.
Di sini, kita membuat sebuah kelas bernama Guru99Constructor.class dengan konstruktor yang berbeda:
package guru; import java.rmi.RemoteException; import java.sql.SQLException; public class Guru99Constructor { public Guru99Constructor(int no) throws ClassCastException, ArithmeticException { } public Guru99Constructor(int no, String name) throws RemoteException, SQLException { } public Guru99Constructor(int no, String name, String address) throws InterruptedException { } }
Di sini, kita menulis sebuah kelas untuk mendapatkan metadata dari konstruktor yang ada di dalam kelas tersebut. Guru99Constructor.class:
package guru; import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; public class Guru99ConstructorMetaDataTest { public static void main(String[] args) { // Create Class object for Guru99Constructor.class Class guru99Class = Guru99Constructor.class; // Get all the constructor information in the Constructor array Constructor[] guru99ConstructorList = guru99Class.getConstructors(); for (Constructor constructor : guru99ConstructorList) { System.out.println("Constructor name : " + constructor.getName()); int guru99Modifiers = constructor.getModifiers(); System.out.println("Constructor modifier : " + Modifier.toString(guru99Modifiers)); Class[] guru99ParamList = constructor.getParameterTypes(); System.out.print("Constructor parameter types : "); for (Class class1 : guru99ParamList) { System.out.print(class1.getName() + " "); } System.out.println(); Class[] guru99ExceptionList = constructor.getExceptionTypes(); System.out.print("Exception thrown by constructors : "); for (Class class1 : guru99ExceptionList) { System.out.print(class1.getName() + " "); } System.out.println(); } } }
- Membuat objek kelas untuk Guru99Constructor.class.
- Mendapatkan semua metadata dari semua konstruktor dalam sebuah array Konstruktor.
- Mencetak semua nama konstruktor yang ada di dalam kelas.
- Mencetak semua pengubah akses dari konstruktor dalam kelas tersebut.
- Mencetak tipe parameter dari konstruktor.
- Mencetak pengecualian yang dilemparkan oleh konstruktor.
















