Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何将类定义或检测为可序列化类?_Java_Swing_Serialization - Fatal编程技术网

Java如何将类定义或检测为可序列化类?

Java如何将类定义或检测为可序列化类?,java,swing,serialization,Java,Swing,Serialization,我使用的是一个扩展Swing对象类的类,例如publicMyClass扩展了JFrame,并使用了引用屏幕对象/显示模式/图形的方法/变量 没有问题。然而,当我试图将Grphics实例g投射到Graphics2D对象时,我发现,这似乎很常见 我很好奇!因为我在没有添加serialVersionID或实现serializable接口的情况下成功地解决了这个问题。如前所述,我不需要序列化我的类。由于它在不必实现/扩展serializable接口或添加serialVersionID的情况下得到了解决-

我使用的是一个扩展Swing对象类的类,例如publicMyClass扩展了JFrame,并使用了引用屏幕对象/显示模式/图形的方法/变量

没有问题。然而,当我试图将Grphics实例g投射到Graphics2D对象时,我发现,这似乎很常见

我很好奇!因为我在没有添加serialVersionID或实现serializable接口的情况下成功地解决了这个问题。如前所述,我不需要序列化我的类。由于它在不必实现/扩展serializable接口或添加serialVersionID的情况下得到了解决-我只是想了解编译器在什么情况下决定或将类视为或更好地进行序列化…我不确定还能如何解释这一点

我想知道的是,Java编译器如何/根据什么标准将一个类限定为可序列化类并要求一个串行ID?在我的例子中,我既不需要序列化,也没有指定序列化

class SerializableClass implements Serializable
您只需实现接口。Java从不要求串行ID;如果您不提供,则在运行时确定

您还可以扩展可序列化类:

class AnotherSerializableClass extends SerializableClass
如果一个类本身实现了可序列化,或者扩展了一个实现了可序列化的类,那么Java将该类分类为可序列化

因为MyClass扩展了实现可序列化的JFrame,所以您的类是可序列化的。

有两种情况

该类未编译且包含“implements Serializable”。 该类已编译,因此可加载,“Serializable.class.isAssignableFromthisClass”返回true,其中“thisClass”是加载该类的结果。 3对所有基类重复上述步骤


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

我无意实现可序列化接口。我不需要它。我只是想知道为什么Java编译器突然用一个SerialID向我射击,说有这个错误:我在没有添加ID的情况下成功地修复了这个错误。这时我有了这个疑问,并好奇地想知道它是如何发生的。我对类进行编程,我应该决定是否需要序列化我的类。这不是由编译器决定的,不是吗?如果您没有serialVersionUID,大多数IDE都会显示警告,但这不是错误。不需要。当需要存储对象的副本、将其发送到同一系统或网络上的另一个进程时,可以实现可序列化接口。因此,您的类可能满足三个条件之一,即它被视为可序列化类,或者它实现了可序列化,或者它扩展了一个实现可序列化的类。现在,我们已经为您回答了我的问题,当然,挖掘根源需要时间。谢谢。Java编译器与此无关。这是来自IDE的消息。您可以将其配置回我相信的警告。可能重复@EJP,请检查我是否已经看到这些问题。我对这个警告毫无疑问!我想知道编译器是如何发出警告的,依据是什么。如果我将IDEEclipse配置为无警告,那么我想我永远不会遇到这种情况。如果它与编译器无关……正如你所说的……那就更值得怀疑了。我已经告诉过你,编译器与它无关,所有关于副本的答案也是如此。你肯定知道有一个“instanceof”操作符和一个“implements”关键字吗?@EJP我的类中没有implements。我不得不用工具来解释我的问题,因为回答者Noob说我的问题很模糊。事实上,您甚至没有阅读/了解我问题的内容就将其标记为重复,因为我引用了您在评论中显示的问题作为参考点。您如何看待用户vkg的答案?它说编译器抱怨。。。我正在进一步挖掘以充分了解情况。我可能是在浪费时间,而不是重复IDE正在做的回答。。。但我想这是值得一读的,我需要去读,并且相信它。到目前为止,我发现,我已经对这个答案发表了评论,在你发表评论之前,他已经删除了这个答案,所以坦率地说,你为什么还要问这个问题有点神秘。JFrame继承自实现Serializable的类。特别是java.awt.Component。这在上面的2和3之下。没什么可挖的了。我想根据我的兴趣挖什么。再加上8个小时前,我已经被迫修改了一个答案,以适应我的问题,并接受了它。仅供参考,我在IDE/Compiler/JVM对话中投票超过了你的。此外,未经核实,任何人不得将问题标记为重复问题。