如何解决将对象从一个 YAML 列表移动到另一个列表时会发生奇怪的事情
我有关于 YAML 文件的问题。 当我尝试将对象从 .yml 文件中的一个列表移动到另一个列表并保存时,会发生这样的奇怪事情:
queued: &id001 []
current: *id001
应该发生什么:
current: Fraithor # <= Minecraft username,from queued,moved when running reQueue()
queued: [] # <= Or just nothing / delete list
reQueue() 方法:
for (String path : FileBasics.FILETYPE.BANWAVE.getConfig().getStringList("queued")) {
List<String> list = FileBasics.FILETYPE.BANWAVE.getConfig().getStringList("current");
List<String> arrayList = new ArrayList<>();
arrayList.add(path);
list.addAll(arrayList);
FileBasics.FILETYPE.BANWAVE.getConfig().set("current",list);
list.remove(path);
FileBasics.FILETYPE.BANWAVE.getConfig().set("queued",list);
try {
FileBasics.FILETYPE.BANWAVE.getConfig().save(FileBasics.FILETYPE.BANWAVE.getFile());
} catch (IOException e) {
e.printStackTrace();
}
}
}
显然,我使用单独的类/emnum 来保存文件 (FileBasics)。这是一段很长的代码,所以我把它粘贴到了 pastebin HERE (https://pastebin.com/XsqvYTBb)
解决方法
您将同一个列表推送到 current
和 queued
。 Java 具有引用语义,这意味着如果您将 arrayList
推送到 current
,current
会将 reference 保存到 arrayList
,因此如果您更改它,{{ 1}} 将指向更改后的列表。
由于您将完全相同的列表推送到 current
,YAML 将在列表第一次出现时添加一个锚点 queued
,并在之后添加一个别名 &id001
以引用同一个列表。
既然您根本不想要 *id001
中的列表,那么您似乎想要
current
虽然我不知道这是什么类型的 API 以及它是否接受字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。