我收到错误消息:


  警告:无法序列化会话属性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/

10-13 07:02