Java 为什么需要使用标记接口来序列化对象?

Java 为什么需要使用标记接口来序列化对象?,java,Java,如果我希望我的应用程序中的所有对象都可以序列化,为什么不能避免这种情况 更新:我知道有些类不能像thread那样序列化,但是java系统也知道thread是不可序列化的,为什么它不能自动管理它呢 我想知道是否有一些根本原因 如果我希望我的应用程序中的所有对象都可以序列化,为什么不能避免这种情况 很简单,因为这就是Java序列化的工作方式 请考虑序列化所有对象是没有意义的 线程实例和大多数流类的实例都包含无法序列化的临界状态 有些类依赖于类静态,并且它们不是序列化的 有些类是不可序列化的,因为它

如果我希望我的应用程序中的所有对象都可以序列化,为什么不能避免这种情况

更新:我知道有些类不能像thread那样序列化,但是java系统也知道thread是不可序列化的,为什么它不能自动管理它呢

我想知道是否有一些根本原因

如果我希望我的应用程序中的所有对象都可以序列化,为什么不能避免这种情况

很简单,因为这就是Java序列化的工作方式

请考虑序列化所有对象是没有意义的

  • 线程
    实例和大多数
    类的实例都包含无法序列化的临界状态
  • 有些类依赖于类静态,并且它们不是序列化的
  • 有些类是不可序列化的,因为它们严重依赖于不可序列化的类
  • 有些类您根本不想或不需要序列化

因此,应用程序程序员应该如何控制序列化的内容?他如何阻止各种不必要的东西被意外地连载?答:通过将他想要序列化的类声明为实现
serializable

如果您自己实现所有与序列化相关的代码,您不需要它,但只要您使用标准库函数来实现它,就必须有某种方式来传达您的类已经设计好并准备好进行序列化。仅仅因为程序中的所有类都是可序列化的,并不意味着它们都在其他程序中。

因为语言就是这样设计的?像这样的问题根本没有意义。使所有类都可序列化本来是可能的,而且实际上更容易,但没有这样做。原因有很多,我在12年前读到的一些常见问题解答或小鹅访谈中给出了这些原因。安全当然是其中之一。但是在这个阶段,这真的是一个徒劳的讨论。

是的,但是java系统知道线程是不可序列化的,为什么它不自动管理它呢?既然我必须对我想要序列化的对象应用一个方法write,我怎么会意外地进行序列化呢?我的意思是我必须做两次这不符合接吻原则?1)事实上,不符合。或者更准确地说,它只知道这一点,因为线程没有实现可序列化。2) 如果您忘记了对象A在某些情况下可能包含对对象B的引用。这不仅仅是因为SUN懒得让它了解自己:)为什么SUN不整合这些知识“了解自己”是使系统智能化的原因。依我看,如果有任何懒散。。。您不希望将类标记为可序列化:-)。此外,我发现很难想象一个Java应用程序的所有应用程序类都应该是可序列化的。这样回答也是毫无意义的。这种语言的设计可能只是因为团队没有时间集成到这个版本中,或者是因为一个根本原因。似乎其他人想知道,所以不要想当然地认为你的意见。但这并不是因为时间不够。那只是你的意见。为什么要花更多的时间来做更少的工作?这是一个经过深思熟虑的设计决策,并且有文档记录。某处。但既然如此,事情就是这样。不仅仅是“我的意见”,你怎么知道?水晶球:)一点也不。大约12年前,我读过一篇关于高斯林的采访,上面是这样说的。我删去了对某人不太有用的回答的反应。记住,有些程序员很自负,所以不要理会他们。最好是投反对票,或是打上冒犯的旗号,然后继续前进。