Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Menguasai Refleksi Java: Memeriksa Kelas, Metode, dan Field pada Waktu Eksekusi

Menguasai Refleksi Java

Pelajari bagaimana API refleksi Java memungkinkan Anda memeriksa dan memodifikasi kelas, metode, field, dan konstruktor selama runtime, meningkatkan fleksibilitas dan memungkinkan perilaku dinamis yang canggih.

Di Java, refleksi memungkinkan Anda untuk memeriksa dan memanipulasi kelas, antarmuka, konstruktor, metode, dan field sementara program berjalan.

Java menyediakan kelas Class, yang mengenkapsulasi metadata tentang kelas atau antarmuka. Sebuah instance Class adalah pintu gerbang ke kemampuan refleksi.


Mendapatkan Objek Class

Untuk melakukan refleksi, Anda pertama-tama memerlukan objek Class. Ada tiga cara umum untuk mendapatkannya:

  1. Menggunakan Class.forName()
    Class<Dog> clazz = Class.forName("com.example.Dog");

    Metode ini menerima nama kelas yang lengkap dan memuat kelas jika belum dimuat.

  2. Menggunakan getClass() pada instance
    Dog dog = new Dog(); Class<Dog> clazz = dog.getClass();

    Mengambil kelas runtime dari objek.

  3. Menggunakan literal .class
    Class<Dog> clazz = Dog.class;

    Menyediakan referensi waktu kompilasi ke objek Class.

Setelah Anda memiliki instance Class, Anda dapat memeriksa metode, field, konstruktor, dan anotasi-nya.


Contoh Praktis: Memeriksa Kelas Dog

import java.lang.Class; import java.lang.reflect.*; class Animal {} public class Dog extends Animal { public void display() { System.out.println("Saya adalah seekor anjing."); } } public class Main { public static void main(String[] args) { try { Dog dog = new Dog(); Class<Dog> clazz = dog.getClass(); System.out.println("Nama: " + clazz.getName()); System.out.println("Modifier: " + Modifier.toString(clazz.getModifiers())); System.out.println("Superclass: " + clazz.getSuperclass().getName()); } catch (Exception e) { e.printStackTrace(); } } }

Output

Nama: com.example.Dog Modifier: public Superclass: com.example.Animal

Dalam cuplikan ini, kita membuat instance Dog, mendapatkan objek Class-nya, dan memeriksa nama kelas, access modifier, dan superclass.

Untuk wawasan lebih dalam tentang Class, konsultasikan dokumentasi resmi Java Class.


Menjelajahi Field, Metode, dan Konstruktor

Paket java.lang.reflect menawarkan kelas khusus untuk introspeksi anggota tertentu:


Refleksi Metode

Kelas Method mengekspos metadata seperti nama, tipe pengembalian, dan modifier. Di bawah ini adalah contoh ringkas:

import java.lang.reflect.*; class Dog { public void display() { System.out.println("Saya adalah seekor anjing."); } private void makeSound() { System.out.println("Guk Guk"); } } public class Main { public static void main(String[] args) { try { Dog dog = new Dog(); Method[] methods = dog.getClass().getDeclaredMethods(); for (Method m : methods) { System.out.println("Nama Metode: " + m.getName()); System.out.println("Modifier: " + Modifier.toString(m.getModifiers())); System.out.println("Tipe Kembali: " + m.getReturnType()); System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } }

Output

Nama Metode: display Modifier: public Tipe Kembali: void Nama Metode: makeSound Modifier: private Tipe Kembali: void

Untuk daftar lengkap utilitas Method, kunjungi dokumentasi resmi Method.


Refleksi Field

Field dapat diakses dan dimodifikasi pada waktu runtime. Kelas Field menyediakan utilitas get, set, dan modifier. Contoh:

import java.lang.reflect.*; class Dog { public String type; private String color; } public class Main { public static void main(String[] args) { try { Dog dog = new Dog(); Class<Dog> clazz = dog.getClass(); // Public field Field typeField = clazz.getField("type"); typeField.set(dog, "labrador"); System.out.println("Nilai: " + typeField.get(dog)); System.out.println("Modifier: " + Modifier.toString(typeField.getModifiers())); // Private field Field colorField = clazz.getDeclaredField("color"); colorField.setAccessible(true); colorField.set(dog, "cokelat"); System.out.println("Nilai: " + colorField.get(dog)); System.out.println("Modifier: " + Modifier.toString(colorField.getModifiers())); } catch (Exception e) { e.printStackTrace(); } } }

Output

Nilai: labrador Modifier: public Nilai: cokelat Modifier: private

Jelajahi dokumentasi kelas Field untuk penggunaan lanjutan.


Refleksi Konstruktor

Konsturktor diintrospeksi melalui kelas Constructor. Kode berikut mencantumkan semua konstruktor dari Dog:

import java.lang.reflect.*; class Dog { public Dog() {} private Dog(int age) {} } public class Main { public static void main(String[] args) { try { Constructor<Dog>[] cons = Dog.class.getDeclaredConstructors(); for (Constructor<Dog> c : cons) { System.out.println("Nama Konstruktor: " + c.getName()); System.out.println("Modifier: " + Modifier.toString(c.getModifiers())); System.out.println("Parameter: " + c.getParameterCount()); System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } }

Output

Nama Konstruktor: Dog Modifier: public Parameter: 0 Nama Konstruktor: Dog Modifier: private Parameter: 1

Untuk detail lebih lanjut, lihat dokumentasi Constructor.


java

  1. Memahami Kata Kunci final Java: Variabel, Metode, dan Kelas
  2. Operator instanceof Java: Panduan Lengkap
  3. Menguasai Warisan Java: Konsep, Jenis, dan Contoh Praktis
  4. Memahami Kelas Bersarang Statis Java: Penggunaan, Perbedaan, dan Contoh
  5. Menguasai Kelas Dalam Anonim Java: Definisi, Sintaks, dan Contoh Praktis
  6. Pola Singleton Java Dijelaskan: Cara Menerapkan dan Menggunakannya dengan Aman
  7. Menguasai Java ArrayList: Operasi, Metode, dan Praktik Terbaik
  8. Menguasai Java ObjectOutputStream: Serialisasi, Metode, dan Contoh Praktis
  9. Menguasai Java Generics – Membangun Kode yang Dapat Digunakan Kembali dan Aman Tipe
  10. Pengoperasian File Java dengan java.io – Pembuatan, Pembacaan, Penulisan & Penghapusan