【问题标题】:Non-transient non-serializable instance field in a non serializable class?非可序列化类中的非瞬态不可序列化实例字段?
【发布时间】:2015-08-11 21:42:32
【问题描述】:

我有一个没有扩展 Serializable 或 Externalizable 接口的类,但在 netbeans 中使用 FindBugs 时仍然遇到错误。谁能建议我如何解决这个问题?

这是我的课

public class Analyzer extends javax.swing.JPanel implements ItemListener, KeyListener{

public AnalyzerVariable [] objAnalyzerVar = new AnalyzerVariable [3];
public AnalyzerVariable objAnalyzerDataTypeInfo;

}

来自 FindBug 的错误:Analyzer 类定义了一个非瞬态不可序列化的实例字段 objAnalyzerVar,对于 objAnalyzerDataTypeInfo 也是如此;

【问题讨论】:

  • 又一个 FindBugs 异常。只需在规则集中对其进行例外处理。每个 Swing 组件反对序列化它们的 Javadoc 中有一个特定的警告,只有疯子才会真正尝试。

标签: java swing serialization


【解决方案1】:

public class Analyzer extends javax.swing.JPanel implements ItemListener, KeyListener{...

Analyserjavax.swing.JPanel 的子类。 因为javax.swing.JPanelSerializable 类,所以Analyser 也是Serializable。所以Findbugs 表明这是一个错误。

更多关于javax.swing.JPanel-javadoc

【讨论】:

  • 您有 3 个选项。 1. 使AnalyzerVariable 可序列化。 2.如果可以重新计算,则将AnalyzerVariable类型成员标记为transient。 3. 正如@EJP 指出的,向 Findbug 规则集添加一个例外。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 2011-09-26
  • 2020-03-15
  • 2012-07-05
  • 1970-01-01
  • 2018-09-12
相关资源
最近更新 更多