gpt4 book ai didi

java - 使用 Gson 使用比较器序列化集

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:56 25 4
gpt4 key购买 nike

我需要序列化一个包含 TreeSet 的类,该类具有自定义比较器(byte[] 不可比较)。

当我尝试使用 Gson (v2.3.1) 反序列化该类时,我得到:

Exception in thread "main" java.lang.ClassCastException: [B cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1290)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)....

因此 TreeSet 不会使用比较器进行反序列化。

该类如下所示:

public class In {

private final SortedSet<byte[]> keys = new TreeSet<>(new ByteKeyComparator());

}

有没有办法让 Gson 明白它需要这个集合的比较器?

最佳答案

你是对的,这是一个序列化错误。但是,它与 Gson 无关,实际上您的自定义比较器被保留。

问题出在 TreeMap.put(K,V) 的实现上与空 TreeSet 的反序列化行为相结合,这会导致支持映射具有 null root 。如果 TreeMap 的根节点为 null 并且您放置了键/值对,它将忽略配置的比较器。

要解决您的问题,请跳过序列化空 TreeSet s。

关于java - 使用 Gson 使用比较器序列化集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28079234/

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