gpt4 book ai didi

java - 为什么 TextNode 没有 update value(set) 方法?

转载 作者:行者123 更新时间:2023-11-29 05:16:30 25 4
gpt4 key购买 nike

我想使用 jackson 修改 TextNode 的值。
但是API里面没有这个方法。
然后我尝试使用反射来克服限制:

public class TestModify {

public static void main(final String[] args) throws JsonProcessingException, IOException,
NoSuchFieldException, SecurityException, IllegalArgumentException,
IllegalAccessException {
final String json = "[{},\"123123\",\"12456\"]";
final ObjectMapper mapper = new ObjectMapper();
final JsonNode node = mapper.readTree(json);
final Iterator<JsonNode> nodes = node.elements();
while (nodes.hasNext()) {
final JsonNode n = nodes.next();
if (n instanceof TextNode) {
final Field f = TextNode.class.getDeclaredField("_value");
f.setAccessible(true);
f.set(n, "updated");
}
System.out.println(n.getClass());
}
System.out.println(node);
}
}

代码似乎工作正常并且 println 显示:

class com.fasterxml.jackson.databind.node.ObjectNode
class com.fasterxml.jackson.databind.node.TextNode
class com.fasterxml.jackson.databind.node.TextNode
[{},"updated","updated"]

那么为什么原来的API中没有update方法呢?

最佳答案

这一定是一个设计决定。 TextNode 代表一个 JSON 字符串。就像 Java String 一样,他们很可能认为它应该是不可变的。

您可以简单地用新实例替换现有的 TextNode 实例。

关于java - 为什么 TextNode 没有 update value(set) 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26352325/

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