Nyahsulit tiga kaedah pelaksanaan refleksi Java
Pengenalan:
Mekanisme refleksi Java merujuk kepada memperoleh maklumat kelas secara dinamik dan mengendalikan ahli kelas pada masa jalan, termasuk pembina, kaedah, medan, dsb. Melalui refleksi, kita boleh mendapatkan struktur lengkap kelas semasa runtime, dan membuat instantiate objek, kaedah panggilan dan akses medan melalui rentetan tanpa mengetahui nama kelas tertentu. Pelaksanaan mekanisme refleksi Java terutamanya bergantung pada tiga kaedah, iaitu objek Kelas, objek Pembina dan objek Kaedah. Artikel ini akan memperkenalkan kaedah pelaksanaan khusus bagi ketiga-tiga kaedah ini dan menyediakan contoh kod yang sepadan.
1. Pelaksanaan Refleksi berdasarkan objek Kelas
Di Java, apabila setiap kelas dimuatkan, objek Kelas yang sepadan akan dihasilkan Melalui objek Kelas ini, kita boleh mendapatkan nama, pengubah suai, kelas induk dan antara muka kelas. dan maklumat lain, dan boleh menggunakan objek ini untuk membuat instantiate objek, kaedah panggilan dalam kelas, dsb.
Berikut adalah contoh kod untuk pelaksanaan refleksi berdasarkan objek Kelas:
public class ReflectDemo { public static void main(String[] args) throws ClassNotFoundException { // 通过类的全限定名获取Class对象 Class<?> clazz = Class.forName("com.example.Person"); // 获取类名 String className = clazz.getName(); System.out.println(className); // 获取修饰符 int modifiers = clazz.getModifiers(); System.out.println(Modifier.toString(modifiers)); // 获取父类 Class<?> superClass = clazz.getSuperclass(); System.out.println(superClass.getName()); // 获取接口 Class<?>[] interfaces = clazz.getInterfaces(); for (Class<?> in : interfaces) { System.out.println(in.getName()); } // 实例化对象 try { Object obj = clazz.newInstance(); System.out.println(obj); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } } } public class Person { private String name; private int age; public Person() { this.name = "John Doe"; this.age = 30; } public void sayHello() { System.out.println("Hello, my name is " + name); } }
2. Pelaksanaan refleksi berdasarkan objek Pembina
Objek Pembina ialah objek yang digunakan untuk mendapatkan maklumat pembina kelas dalam mekanisme pantulan Java objek Pembina kita boleh Dapatkan pengubah suai pembina, jenis parameter dan maklumat lain, dan gunakan objek ini untuk membuat instantiate objek kelas.
Berikut adalah contoh kod untuk pelaksanaan refleksi berdasarkan objek Pembina:
public class ReflectDemo { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException { Class<?> clazz = Class.forName("com.example.Person"); // 获取所有公共构造函数 Constructor<?>[] constructors = clazz.getConstructors(); for (Constructor<?> constructor : constructors) { System.out.println(constructor); } // 获取指定参数类型的构造函数 Constructor<?> constructor = clazz.getConstructor(String.class, int.class); System.out.println(constructor); // 实例化对象 try { Object obj = constructor.newInstance("Tom", 25); System.out.println(obj); } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } } public class Person { private String name; private int age; public Person() { this.name = "John Doe"; this.age = 30; } public Person(String name, int age) { this.name = name; this.age = age; } public void sayHello() { System.out.println("Hello, my name is " + name); } }
3 Pelaksanaan refleksi berdasarkan objek Kaedah
Objek kaedah ialah objek yang digunakan untuk mendapatkan maklumat kaedah kelas dalam mekanisme refleksi Java melalui Pengubah suai Kaedah objek, jenis nilai pulangan, jenis parameter dan maklumat lain, dan anda boleh menggunakan objek ini untuk memanggil kaedah dalam kelas.
Berikut ialah contoh kod untuk pelaksanaan refleksi berdasarkan objek Kaedah:
public class ReflectDemo { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { Class<?> clazz = Class.forName("com.example.Person"); // 获取所有公共方法 Method[] methods = clazz.getMethods(); for (Method method : methods) { System.out.println(method); } // 获取指定方法 Method method = clazz.getMethod("sayHello"); System.out.println(method); // 调用方法 try { Object obj = clazz.newInstance(); method.invoke(obj); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } } } public class Person { private String name; private int age; public Person() { this.name = "John Doe"; this.age = 30; } public void sayHello() { System.out.println("Hello, my name is " + name); } }
Ringkasan:
Mekanisme refleksi Java menyediakan cara untuk mengendalikan kelas secara dinamik semasa runtime, membolehkan kami melalui tanpa mengetahui nama kelas tertentu instantiate objek, kaedah panggilan, medan akses, dsb. Artikel ini memperkenalkan tiga kaedah pelaksanaan pantulan berdasarkan objek Kelas, objek Pembina dan objek Kaedah dan menyediakan contoh kod yang sepadan untuk rujukan. Menggunakan mekanisme refleksi Java boleh menjadikan kod kami lebih fleksibel dan berskala, tetapi dalam pembangunan sebenar, kami mesti memberi perhatian kepada kesesuaian dan keselamatan menggunakan refleksi untuk mengelakkan risiko yang tidak perlu dan kehilangan prestasi.
Atas ialah kandungan terperinci Mendedahkan Tiga Pelaksanaan Berbeza Java Reflection. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!