您的位置:首页 > 健康 > 养生 > 在 `JDK 17` 中使用反射

在 `JDK 17` 中使用反射

2025/3/10 19:39:19 来源:https://blog.csdn.net/qq_44810930/article/details/140622161  浏览:    关键词:在 `JDK 17` 中使用反射

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");// 获取私有字段 nameField 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);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com