在 `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");
// 获取私有字段 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);
}
}
原文地址:https://blog.csdn.net/qq_44810930/article/details/140622161
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!