gpt4 book ai didi

java - 自动生成包含类字段的映射

转载 作者:行者123 更新时间:2023-12-02 11:55:25 24 4
gpt4 key购买 nike

我有以下类(class)

@Data
public class CMC{

String f1;
String f2;
String f3;
public Map<String, Supplier<String>> valuesMap() {
return ImmutableMap.<String, Supplier<String>>builder()
.put("f1", this::f1)
.put("f2", this::f2)
.put("f3", this::f3)
.build();
}

}

正如您所看到的,我有一些字段和一个映射,其中包含指向返回该字段值的函数的每个字段。

此解决方案的问题在于,开发人员可能会到达这里并添加新字段,但忘记将其添加到 map 中。

有没有办法自动化这个过程?

我希望像 lombok 这样的东西可以帮助我解决这个问题。需要类中的字段列表并访问它们的值是很常见的事情。

为了解决这个问题,我会创建一个注释,然后以某种方式使用反射来获得我想要的行为,但我认为类似的东西已经在某些工具中实现了。

最佳答案

您应该查看:Class::getDeclaredFields ; Class::getSuperclass ;和 Field 。在一起,他们应该能够得到你正在寻找的东西......比如:

final Map<String, Object> map = new HashMap<>();
Class<?> klass = this.getClass();
while (klass != null) {
for (final Field field : klass.getDeclaredFields()) {
if (!field.isAccessible()) {
field.setAccessible(true);
}
map.put(field.getName(), field.get(this));
}
klass = klass.getSuperclass();
}

您需要处理异常,确定在哪里调用它,并确认是否要对所有字段(私有(private)等)或只是一些,是否将值延迟缓存在某处,以及是否所有内容都需要转换为 String (在这种情况下,map 中的 Object 可以更改)。

关于java - 自动生成包含类字段的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47638582/

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