【问题标题】:Non-serializable field in serializable class (transient keyword)可序列化类中的不可序列化字段(瞬态关键字)
【发布时间】:2012-07-05 23:12:26
【问题描述】:

我有一个扩展 Servlet 的可序列化类

public class FileDownload extends HttpServlet{
  @SuppressWarnings("compatibility:6754389671327954013")
  private static final long serialVersionUID = 1L;
  private ResultSet rset;
  ......
}

我的问题是:

rset 对象是否在编译或运行时自动转换为transient?还是我必须将其明确标记为transient? (这是我的 IDE JDeveloper 发出的警告)。

【问题讨论】:

  • OTOH,为什么要将 ResultSet 存储在 servlet 中?
  • 教育类问题 :) 它可以是任何其他类型的对象

标签: java oop serialization transient


【解决方案1】:

不,序列化不会忽略该字段 - 如果您尝试序列化 FileDownload 的实例,您将获得 java.io.NotSerializableException。标记它transient。顺便说一句,ResultSetServlet 中作为 字段 做什么?这不是线程安全的。 ResultSets 在任何情况下都应该只是局部变量。

【讨论】:

    【解决方案2】:

    你必须自己调用transient。但是你不能serialize一个对象,除非它实现了Serializable接口。ResultSet就是这样一种对象。

    【讨论】:

    • 第一句话毫无意义。第二个不正确:ResultSet 根本不是一个对象,它是一个接口。
    猜你喜欢
    • 1970-01-01
    • 2015-08-11
    • 2013-08-04
    • 2018-09-12
    • 2016-12-12
    • 2016-07-01
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多