我必须遗漏一些明显但我无法序列化TreeBasedTable
的东西。它被标记为@GwtCompatible(serializable = true)
,所以我的理解是我需要使用guava-gwt
库来(取消)序列化它。
但我找不到那样做。一个人为的代码示例将非常感激。
有关信息,我的pom包含guava
和guava-gwt
,版本均为14.0。
修改
感谢答案,我现在明白TreeBasedTable是可序列化的。所以我已经删除了所有gwt引用并使其工作。但是,这段代码仍然失败(这是让我认为TreeBasedTable不可序列化的代码) - 所以我猜问题是自定义Comparators ...
public static void main(String[] args) throws Exception {
//with the following table it works
//Table<Integer, String, Object> table = TreeBasedTable.create();
//but with this one, it fails
Table<Integer, String, Object> table = TreeBasedTable.create(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
}, String.CASE_INSENSITIVE_ORDER);
table.put(1, "s", 123);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Paths.get("c:/temp/test").
toFile()));) {
oos.writeObject(table);
}
Table<Integer, String, Object> saved = null;
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Paths.get("c:/temp/test").
toFile()));) {
saved = (Table<Integer, String, Object>) ois.readObject();
}
System.out.println(table.equals(saved));
Files.delete(Paths.get("C:/temp/test"));
}
答案 0 :(得分:3)
如果您正在谈论普通的Java序列化,是的:TreeBasedTable
是Serializable
。
TreeBasedTable
扩展StandardRowSortedTable
,扩展StandardTable
,实现Serializable
。
Serializable foo = TreeBasedTable.create();
由于编译器没有抱怨此行,您知道TreeBasedTable
实现了Serializable
。
<强>更新强>
String.CASE_INSENSITIVE_ORDER
实现Serializable
,所以你需要做的就是将你的匿名Integer比较器重构为一个实现Serializable
的内部类。或者:更好的是,使用Ordering.natural()
代替,已经Serializable
。