【发布时间】:2011-12-08 16:30:36
【问题描述】:
我有一个类Data,它实现了Serializable 接口。这个类有这样的字段
private boolean q = false;
private String a = "";
private List<Someclass> m = Collections.emptyList();
private List<Object[]> d = Collections.emptyList();
分配给这些成员的值是默认值。 Someclass 类也实现了 Serializable 并且它有这样的列
private Types sqlType;
private int columnWidth;
private String columnName;
Types 是一个也实现可序列化的枚举。
在Data 类中,我有List<Object[]> d,我将在其中保存通过jdbc 从数据库获取的数据(迭代ResultSet 时我使用getObject() 方法)。我使用这种结构,因为它可以运行任何查询(查询的结构未知)。在List<Someclass> m 我持有查询元数据。因此,当我尝试使用简单查询获取行时,我得到了
com.google.gwt.user.client.rpc.SerializationException: Type '[Ljava.lang.Object;' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = [Ljava.lang.Object;@127053a9
为什么会发生?我所有的传输对象都是可序列化的。
编辑
好的,Object 不是可序列化的,因此它不能传递给服务器并从服务器返回。但是在这种情况下我应该使用什么。泛型对我没有帮助,因为我在编译时不知道类型
【问题讨论】:
-
不管
Object是不可序列化的,在RPC调用中最好使用ArrayList而不是List。见http://stackoverflow.com/a/3060233/595072 -
我们使用
ArrayList<Serializable>而不是ArrayList<Object>。您会收到 GWT 编译警告,但这没关系。