我收到错误消息:
警告:无法序列化会话属性DocumentFieldHelper
会话{idsession} java.io.NotSerializableException:
com.example.DocumentKind,同时尝试序列化类
DocumentFieldHelper。
DocumentFieldHelper的代码
private class DocumentFieldHelper implements Serializable
{
private static final long serialVersionUID = 1L;
private Map<String, Object> fieldValues;
private String documentKind;
public DocumentFieldHelper()
{
fieldValues = new HashMap<String, Object>();
}
public NativeDockindQuery createQuery()
{
try
{
NativeDockindQuery ndq = NativeDockindQuery.create(this.getDocumentKind());
return ndq;
} catch (EdmException e)
{
log.error(e.getMessage(), e);
}
return null;
}
public String getDocumentKind() {
return documentKind;
}
NativeDockindQuery的代码
public class NativeDockindQuery implements Serializable {
private static final long serialVersionUID = -2001430456575525419L;
private transient DocumentKind kind;
public static NativeDockindQuery create(String kind) throws EdmException {
return new NativeDockindQuery(DocumentKind.findByCn(kind), false);
}
private NativeDockindQuery(DocumentKind kind, boolean checkPermissions) throws EdmException {
this.kind = kind;
}
}
当然,还有更多的代码,但是我认为这是重要的部分。
我猜NativeDockindQuery必须是可序列化的,因为它是DocumentFieldHelper方法之一中的返回类型?
而且是否可能因为我使用的是DocumentKind的静态方法而出现此问题?
最佳答案
好的,我已经进行了一些测试,当然,除了我发布的代码之外,其他地方都存在问题。我应该提一下,这段代码不是我的,我只是在看到一些错误之后才进行更正。
事实证明,DocumentFieldHelper类是其他一些类中的内部类。外部类已声明DocumentKind类的实例变量,这就是问题出现的原因。我刚刚使DocumentFieldHelper与外部类成为独立类,并且一切正常。
课?序列化内部类时要小心。
感谢Vlad和SacJn的答复。
关于java - NotSerializableException即使在使用 transient 时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32373218/