gpt4 book ai didi

java - 如何通过 Java 17 中的反射获取所有 Record 字段及其值?

转载 作者:行者123 更新时间:2023-12-04 12:19:06 26 4
gpt4 key购买 nike

我有一节课:

class A {
public final Integer orgId;
}
我用 Java 17 中的记录替换了它:
record A (Integer orgId) {
}
此外,我有一个通过反射进行验证的代码,该代码与常规类一起工作,但不适用于 Records:
Field[] fields = obj.getClass().getFields(); //getting empty array here for the record
for (Field field : fields) {
}
在 Java 17 中通过反射获取 Record 对象字段及其值的正确方法是什么?

最佳答案

您可以使用以下方法:

RecordComponent[] getRecordComponents()
您可以从 RecordComponent 检索名称、类型、泛型类型、注释及其访问器方法。 .
Point.java:
record Point(int x, int y) { }
RecordDemo.java:
import java.lang.reflect.RecordComponent;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

public class RecordDemo {
public static void main(String args[]) throws InvocationTargetException, IllegalAccessException {
Point point = new Point(10,20);
RecordComponent[] rc = Point.class.getRecordComponents();
System.out.println(rc[0].getAccessor().invoke(point));
}
}
输出:
10
或者,
import java.lang.reflect.RecordComponent;
import java.lang.reflect.Field;

public class RecordDemo {
public static void main(String args[])
throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException {
Point point = new Point(10, 20);
RecordComponent[] rc = Point.class.getRecordComponents();
Field field = Point.class.getDeclaredField(rc[0].getAccessor().getName());
field.setAccessible(true);
System.out.println(field.get(point));
}
}

关于java - 如何通过 Java 17 中的反射获取所有 Record 字段及其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69554180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com