Java Reflection cukup kuat dan bisa sangat berguna. Java Reflection memungkinkan untuk memeriksa kelas, antarmuka, bidang dan metode saat runtime, tanpa mengetahui nama-nama kelas, metode, dll. Pada waktu kompilasi. Dimungkinkan juga untuk instantiate objek baru, memanggil metode dan mendapatkan / set nilai bidang menggunakan refleksi.
Contoh Java Reflection yang cepat untuk menunjukkan kepada Anda seperti apa bentuk refleksi itu:
Method[] methods = MyObject.class.getMethods();
for(Method method : methods){
System.out.println("method = " + method.getName());
}
Contoh ini memperoleh objek Kelas dari kelas yang disebut MyObject. Menggunakan objek kelas contoh mendapat daftar metode di kelas itu, iterates metode dan cetak nama mereka.
Bagaimana cara kerjanya dijelaskan di sini
Sunting : Setelah hampir 1 tahun saya mengedit jawaban ini karena ketika membaca tentang refleksi saya mendapat beberapa kegunaan Refleksi lagi.
- Spring menggunakan konfigurasi bean seperti:
<bean id="someID" class="com.example.Foo">
<property name="someField" value="someValue" />
</bean>
Ketika konteks Spring memproses elemen <bean> ini, ia akan menggunakan Class.forName (String) dengan argumen "com.example.Foo" untuk membuat instance Kelas itu.
Kemudian akan menggunakan refleksi lagi untuk mendapatkan setter yang sesuai untuk elemen <properti> dan mengatur nilainya ke nilai yang ditentukan.
- Junit menggunakan Refleksi terutama untuk menguji metode Pribadi / Terlindungi.
Untuk metode pribadi,
Method method = targetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);
Untuk bidang pribadi,
Field field = targetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);