我有课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 不可序列化,这使得 Object[] 不可序列化,这使得 List 不可序列化,这使得 Data 不可序列化。
这样想:如果您无法序列化 Object[] 中的给定对象,那么您将如何序列化 Object[]?如果你不能序列化它,你将如何序列化它的列表?如果您无法序列化该列表,那么您将如何序列化包含该列表的内容?
现在,Object[] 中的所有内容最终都可能是可序列化的——但根据您键入的方式,编译器无法保证这一点。
编辑:关于您应该使用什么,我将创建某种包装类来保存 SQL 查询的结果,并使该结果可序列化。
关于java - Gwt 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8434262/