Pemahaman mendalam tentang cara pemantulan Java dipanggil memerlukan contoh kod khusus
Pengenalan:
Refleksi Java (Refleksi) ialah mekanisme berkuasa yang membolehkan program memperoleh maklumat kelas secara dinamik dan memanipulasi kelas serta objek pada masa jalan . Kelas teras refleksi Java ialah kelas Kelas, yang menyediakan satu siri kaedah untuk mendapatkan pembina, kaedah, medan, dll. kelas, dan boleh memanggilnya melalui refleksi. Artikel ini akan menyelidiki kaedah panggilan refleksi Java dan memberikan contoh kod khusus.
1. Dapatkan objek Kelas
Di Java, terdapat tiga cara untuk mendapatkan objek Kelas:
2. Gunakan refleksi untuk memanggil Fungsi pembina
Menggunakan pantulan, anda boleh memanggil pembina kelas secara dinamik. Berikut ialah contoh kod untuk mendapatkan pembina dan memanggilnya:
Class clazz = Person.class; Constructor constructor = clazz.getConstructor(String.class, int.class); Person person = (Person) constructor.newInstance("Tom", 18);
3. Gunakan refleksi untuk memanggil kaedah ahli
Gunakan refleksi untuk memanggil kaedah ahli kelas secara dinamik. Berikut ialah contoh kod untuk mendapatkan dan memanggil kaedah ahli:
Class clazz = Person.class; Method method = clazz.getMethod("sayHello", String.class); Person person = new Person(); method.invoke(person, "World");
4. Gunakan refleksi untuk mendapatkan dan mengubah suai medan
Gunakan refleksi untuk mendapatkan dan mengubah suai medan kelas secara dinamik. Berikut ialah contoh kod untuk mendapatkan dan mengubah suai medan:
Class clazz = Person.class; Field field = clazz.getField("name"); Person person = new Person(); String name = (String) field.get(person); field.set(person, "Tom");
5. Gunakan refleksi untuk memanggil kaedah dan medan peribadi
Gunakan refleksi untuk mengakses dan memanggil kaedah peribadi dan medan kelas. Berikut ialah contoh kod untuk mendapatkan dan memanggil kaedah dan medan peribadi:
Class clazz = Person.class; Method method = clazz.getDeclaredMethod("privateMethod", int.class); method.setAccessible(true); Person person = new Person(); int result = (int) method.invoke(person, 10); Field field = clazz.getDeclaredField("privateField"); field.setAccessible(true); int value = (int) field.get(person);
6. Gunakan pantulan untuk mencipta objek secara dinamik
Gunakan pantulan untuk mencipta objek secara dinamik. Berikut ialah contoh kod yang menggunakan pantulan untuk mencipta objek secara dinamik:
Class clazz = Person.class; Person person = (Person) clazz.newInstance();
7. Gunakan pantulan untuk melanjutkan aplikasi
Menggunakan pantulan, anda boleh melaksanakan beberapa fungsi lanjutan dalam beberapa senario khas, seperti proksi dinamik, pemprosesan anotasi, dsb. Berikut ialah contoh kod menggunakan refleksi untuk melaksanakan proksi dinamik mudah:
class ProxyHandler implements InvocationHandler { private Object target; public ProxyHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("Before invoke"); Object result = method.invoke(target, args); System.out.println("After invoke"); return result; } } Class clazz = Person.class; Person person = new Person(); InvocationHandler handler = new ProxyHandler(person); Person proxy = (Person) Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), handler); proxy.sayHello("World");
Kesimpulan:
Melalui penjelasan dan contoh kod artikel ini, kami mempunyai pemahaman yang mendalam tentang cara refleksi Java dipanggil. Mekanisme refleksi boleh membantu kami memperoleh dan mengendalikan maklumat kelas secara dinamik, dan melaksanakan beberapa fungsi lanjutan dalam beberapa senario khas Ia juga membawa tahap kerumitan dan kehilangan prestasi tertentu, jadi ia perlu ditimbang dengan teliti apabila menggunakannya. Saya berharap artikel ini dapat membantu pembaca dan mendalami pemahaman dan aplikasi refleksi Java.
Atas ialah kandungan terperinci Terokai pemahaman yang lebih mendalam tentang kaedah panggilan refleksi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!