在 JDK 17 中使用反射的基本步调如下:
步调一:导入相关类
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.lang.reflect.Constructor;
复制代码 步调二:获取类对象
- // 通过类的全限定名获取 Class 对象
- Class<?> clazz = Class.forName("your.package.YourClass");
复制代码 步调三:操作字段
- // 获取指定名称的字段
- Field field = clazz.getDeclaredField("yourFieldName");
- // 设置字段可访问
- field.setAccessible(true);
- // 获取字段的值
- Object fieldValue = field.get(yourObjectInstance);
复制代码 步调四:操作方法
- // 获取指定名称和参数类型的方法
- Method method = clazz.getDeclaredMethod("yourMethodName", parameterTypes);
- // 设置方法可访问
- method.setAccessible(true);
- // 调用方法
- method.invoke(yourObjectInstance, parameters);
复制代码 步调五:操作构造函数
- // 获取指定参数类型的构造函数
- Constructor<?> constructor = clazz.getDeclaredConstructor(parameterTypes);
- // 设置构造函数可访问
- constructor.setAccessible(true);
- // 创建对象实例
- Object object = constructor.newInstance(parameters);
复制代码 以下是一个简单的示例,演示如何在 JDK 17 中使用反射来获取类的私有字段和调用私有方法:
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- class Person {
- private String name;
- private void sayHello() {
- System.out.println("Hello, I'm " + name);
- }
- public Person(String name) {
- this.name = name;
- }
- }
- public class ReflectionExample {
- public static void main(String[] args) throws Exception {
- // 获取 Person 类的 Class 对象
- Class<?> clazz = Person.class;
- // 创建 Person 对象
- Object personObject = clazz.getDeclaredConstructor(String.class).newInstance("Alice");
- // 获取私有字段 name
- Field nameField = clazz.getDeclaredField("name");
- nameField.setAccessible(true);
- String name = (String) nameField.get(personObject);
- System.out.println("Name: " + name);
- // 获取私有方法 sayHello 并调用
- Method sayHelloMethod = clazz.getDeclaredMethod("sayHello");
- sayHelloMethod.setAccessible(true);
- sayHelloMethod.invoke(personObject);
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |