【问题标题】:How does Java define or detect a class as a serializable class?Java 如何将一个类定义或检测为可序列化类?
【发布时间】:2014-06-20 11:22:20
【问题描述】:

我正在使用一个扩展 Swing 对象类的类(例如 public myClass extends JFrame),并使用引用 Screen objects/DisplayMode/Graphics 的方法/变量。

没有问题。但是,当我尝试将 Grphics 实例 g 转换为 Graphics2D 对象时,我得到了,似乎很常见 error as explained in multiple places of SE with great answers and information

我很好奇!因为我设法在没有添加 serialVersionID 或 没有 实现可序列化接口的情况下解决了这个问题。如前所述,我不需要对我的课程进行序列化。由于无需实现/扩展可序列化接口或添加 serialVersionID 即可解决 - 我只是想了解编译器在什么情况下决定对待as 或 better 被序列化...我不确定我还能如何解释这一点。

我想知道的是,Java 编译器如何/在什么条件下将一个类限定为可序列化并要求一个序列 ID?就我而言,我既不需要序列化,也没有指定序列化。

【问题讨论】:

  • Java 编译器与它无关。这是来自您的 IDE 的消息。您可以将其配置回我认为的警告。
  • @EJP,请检查我是否已经看过这些问题。我对警告没有任何疑问或问题!我想知道编译器是如何发出警告的,基于什么。如果我将我的 IDE (Eclipse) 配置为无警告 - 那么我认为我永远不会遇到这种情况。如果它与编译器无关......正如你所说......那就更令人怀疑了。
  • 我已经告诉过你,编译器与它无关,所有重复的答案也是如此。您肯定知道有一个“instanceof”运算符和一个“implements”关键字吗?
  • @EJP 我的班级没有工具。我不得不使用implements 来解释我的问题,因为回答者 Noob 说我的问题含糊不清。您实际上将其标记为重复,甚至没有阅读/知道我的问题的内容 - 因为我引用了您在评论中显示的问题作为参考点。

标签: java swing serialization


【解决方案1】:
class SerializableClass implements Serializable

您只需实现接口。 Java 从不要求序列号;如果您不提供,则在运行时确定。

你也可以扩展一个可序列化的类:

class AnotherSerializableClass extends SerializableClass

如果一个类实现了 Serializable 本身或扩展了一个实现 Serializable 的类,Java 将其分类为 Serializable。

由于MyClass 扩展了实现SerializableJFrame,因此您的类是可序列化的。

【讨论】:

  • 我无意实现 Serializable 接口。我不需要它。我只是想知道为什么 Java 编译器突然用 SerialID 告诉我有这个错误 :) 我设法在不添加 ID 的情况下修复了错误。那时我现在有这个疑问,很想知道它是如何发生的。我对课程进行编程,我应该决定是否需要对课程进行序列化。这不取决于编译器,不是吗?
  • 如果您没有 serialVersionUID,大多数 IDE 会显示警告,但这不是错误。您不需要拥有一个。
  • 当您需要存储对象的副本、将其发送到同一系统或网络上的另一个进程时,您可以实现 Serializable 接口。所以也许你的类满足三个条件之一,它被视为一个可序列化的类
  • 要么实现Serializable,要么扩展实现Serializable的类。
  • 现在我们已经回答了您对我的问题的answer 问题,当然需要时间来挖掘根源。谢谢。
【解决方案2】:

有两种情况。

  1. 该类未编译并包含“实现可序列化”。
  2. 类已编译,因此可加载,“Serializable.class.isAssignableFrom(thisClass)”返回 true,其中“thisClass”是加载类的结果。

(3) 对所有基类重复。

请注意,这是执行此操作的 IDE,而不是 Java 编译器。这不是编译错误。

【讨论】:

  • 用户vkg的回答你怎么看?它指出“编译器抱怨......”我正在进一步挖掘以充分了解情况。我可能会浪费我的时间,而不是接受你重复“IDE 正在做”的答案......但我想这值得一读,我需要阅读并确信它。到目前为止我发现了什么,JFrame is implicitly implements serializable interface
  • 我已经对那个答案发表了评论,并且在您发布此评论之前他已经将其删除,所以坦率地说,您为什么要问这个问题有点神秘。 JFrame 继承自实现 Serializable. 的类,具体来说,java.awt.Component. 属于上述 (2) 和 (3) 之下。没有什么可以深入研究的了。
  • 我想根据自己的兴趣挖掘什么。再加上 8 小时前,我已经强制修改答案以适应我的问题并接受它。仅供参考,我赞成你的 IDE/编译器/JVM 演讲。此外,任何人都不应在未经验证的情况下将问题标记为重复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
相关资源
最近更新 更多