Mekanisme refleksi Java membolehkan akses dinamik dan manipulasi maklumat kelas, termasuk kaedah dan pembolehubah ahli. Untuk mendapatkan kaedah, anda boleh menggunakan kaedah getMethods(), getReturnType() dan getParameterTypes() Untuk mendapatkan pembolehubah ahli, anda boleh menggunakan kaedah getFields() dan get() Untuk mendapatkan anotasi, anda boleh menggunakan getAnnotations(). Untuk mendapatkan parameter dan jenis nilai pulangan, anda boleh menggunakan kaedah getParameterTypes( ) dan getReturnType(). Dalam kes sebenar, pembolehubah ahli dan kaedah kelas Orang boleh diperolehi secara dinamik melalui mekanisme pantulan.
Mekanisme refleksi Java: Dapatkan kaedah dan pembolehubah ahli kelas
Mekanisme pantulan ialah mekanisme berkuasa di Java yang membolehkan kami mengakses dan memanipulasi maklumat kelas secara dinamik, termasuk kaedah dan pembolehubah ahli.
Dapatkan kaedah kelas
Untuk mendapatkan semua kaedah kelas, anda boleh menggunakan kaedahgetMethods()
:getMethods()
方法:
Class> clazz = MyClass.class; Method[] methods = clazz.getMethods();
如果只想获取特定类型的方法,可以使用重载的getMethods()
方法,例如:
Method[] getDeclaredMethods = clazz.getDeclaredMethods(); Method[] getPublicMethods = clazz.getMethods();
获取类的方法参数和返回值类型
获取方法的参数和返回值类型可以使用getParameterTypes()
和getReturnType()
方法:
Method method = clazz.getMethod("myMethod"); Class>[] parameterTypes = method.getParameterTypes(); Class> returnType = method.getReturnType();
获取类的方法注解
获取方法的注解可以使用getAnnotations()
和getAnnotation()
方法:
Annotation[] annotations = method.getAnnotations(); Annotation annotation = method.getAnnotation(MyAnnotation.class);
获取类的成员变量
要获取类的所有成员变量,可以使用getFields()
方法:
Field[] fields = clazz.getFields();
如果只想获取特定类型或可见性的成员变量,可以使用重载的getFields()
方法,例如:
Field[] getDeclaredFields = clazz.getDeclaredFields(); Field[] getPublicFields = clazz.getFields();
获取类的成员变量值
获取成员变量的值可以使用get()
方法:
Field field = clazz.getField("myField"); Object value = field.get(myObject);
实战案例
考虑以下示例,我们想要动态地获取类Person
的方法和成员变量:
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class Main { public static void main(String[] args) { Class> clazz = Person.class; // 获取类的方法 for (Method method : clazz.getMethods()) { System.out.println("Method: " + method.getName()); System.out.println("Modifiers: " + Modifier.toString(method.getModifiers())); // 获取方法参数和返回值类型 System.out.println("Parameters:"); for (Class> parameterType : method.getParameterTypes()) { System.out.println(" - " + parameterType.getName()); } System.out.println("Return type: " + method.getReturnType().getName()); // 获取方法注解 for (Annotation annotation : method.getAnnotations()) { System.out.println("Annotation: " + annotation.annotationType().getName()); } System.out.println(); } // 获取类的成员变量 for (Field field : clazz.getDeclaredFields()) { System.out.println("Field: " + field.getName()); System.out.println("Modifiers: " + Modifier.toString(field.getModifiers())); System.out.println("Type: " + field.getType().getName()); System.out.println(); } } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
这段代码将动态地打印类Person
rrreee
getMethods()
yang terlebih beban, contohnya: rrreeeDapatkan parameter kaedah dan jenis nilai pulangan kelasUntuk mendapatkan parameter dan jenis nilai pulangan kaedah, anda boleh menggunakan kaedah
getParameterTypes()
dan
getReturnType()
: rrreeeDapatkan anotasi kaedah bagi kelasDapatkan anotasi kaedah menggunakan
getAnnotations() dan getAnnotation()
Kaedah: rrreee Dapatkan pembolehubah ahli kelas Untuk mendapatkan semua pembolehubah ahli kelas, anda boleh menggunakan
getFields()
kaedah: rrreee Jika anda hanya mahu mendapatkan ahli daripada jenis atau keterlihatan tertentu Untuk pembolehubah, anda boleh menggunakan kaedah
getFields()
yang terlebih beban, contohnya: rrreeeUntuk dapatkan nilai pembolehubah ahli kelasUntuk mendapatkan nilai pembolehubah ahli, anda boleh menggunakan
get()
Kaedah: rrreeeKes praktikalPertimbangkan contoh berikut, kami ingin mendapatkan kaedah dan pembolehubah ahli kelas secara dinamik
Orang
: rrreeeKod ini akan secara dinamik mencetak kelas
Semua kaedah dan pembolehubah ahli Orang.
Atas ialah kandungan terperinci Bagaimanakah mekanisme refleksi Java mendapatkan kaedah kelas dan pembolehubah ahli?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!