奇怪的 Java 序列化问题
Strange Java serialization issue
我有一个简单的 java 摘要 class:
abstract public class MyClass implements Streamable {
private static final long serialVersionUID = 5593048244217796061L;
...
protected MyClass() { }
...
abstract public ReturnType abstractMethod(ArgType crd);}
提到的所有类型也是可流式传输的(我没有使用默认的 Java 序列化,而是一些 "GWT" 序列化程序)。
现在,我有很多 classes 是这样工作的:
public abstract class AnotherClass implements Streamable {
protected AnotherClass() { }
protected void initDeterminators() {
MyClass determinator = new MyClass(conditions) {
@Override
public ReturnType abstractMethod(ArgType crd) {
//some code
}
};
addDeterminator(determinator);
}}
在序列化 "AnotherClass" 时出现错误:
com.nkdata.gwt.streamer.client.StreamerException: Error creating streamer for class package.AnotherClass
添加 "Serial UIID" 没有帮助。 "MyClass" 确实有受保护的默认构造函数。我应该怎么做才能使其可序列化?我可以避免更改所有其他使用 "MyClass" 的 classes 吗?
原来我有一些为了简单起见没有提到的交叉引用:
代替
//some code
我正在调用外部 "AnotherClass" 实例的方法,这似乎是序列化的禁忌。
我已经解决了:
1) 避免匿名 class
2) 将 "conditions" 和 "this" 传递给 class 的构造函数。
3) 而不是
>some code calling outer method<
我做过
>some code calling "parent.method()"<
我有一个简单的 java 摘要 class:
abstract public class MyClass implements Streamable {
private static final long serialVersionUID = 5593048244217796061L;
...
protected MyClass() { }
...
abstract public ReturnType abstractMethod(ArgType crd);}
提到的所有类型也是可流式传输的(我没有使用默认的 Java 序列化,而是一些 "GWT" 序列化程序)。
现在,我有很多 classes 是这样工作的:
public abstract class AnotherClass implements Streamable {
protected AnotherClass() { }
protected void initDeterminators() {
MyClass determinator = new MyClass(conditions) {
@Override
public ReturnType abstractMethod(ArgType crd) {
//some code
}
};
addDeterminator(determinator);
}}
在序列化 "AnotherClass" 时出现错误:
com.nkdata.gwt.streamer.client.StreamerException: Error creating streamer for class package.AnotherClass
添加 "Serial UIID" 没有帮助。 "MyClass" 确实有受保护的默认构造函数。我应该怎么做才能使其可序列化?我可以避免更改所有其他使用 "MyClass" 的 classes 吗?
原来我有一些为了简单起见没有提到的交叉引用: 代替
//some code
我正在调用外部 "AnotherClass" 实例的方法,这似乎是序列化的禁忌。
我已经解决了:
1) 避免匿名 class
2) 将 "conditions" 和 "this" 传递给 class 的构造函数。
3) 而不是
>some code calling outer method<
我做过
>some code calling "parent.method()"<