【问题标题】:Cloning and serializing a final object克隆和序列化最终对象
【发布时间】:2013-11-19 03:26:57
【问题描述】:

当一个类被声明为final时,是否可以克隆或序列化它的对象?或者这是不可能的,因为 final 阻止了子类的扩展,因此阻止了克隆和序列化的实现?

【问题讨论】:

  • final 与克隆无关。防止子类化不复制。

标签: java serialization final cloning modifier


【解决方案1】:

Final for classes --> 你不能扩展这个类。 对象的最终 --> 您不能更改对对象的引用。

Serializable/cloning---> 这些概念是针对对象的。您实现一个接口来使特定类的对象可序列化/可克隆。

所以,是的,当一个类被声明为 Final 时,只要你实现了必要的接口,就可以序列化/克隆它的对象。

【讨论】:

  • 对不起,我想我解释得不好。我想要得到的是:从攻击者的角度来看,当类被声明为 final 时,是否可以克隆/序列化某些东西?
  • (从攻击者的角度来看??..)..是的...但是该类应该已经实现了必要的接口...
  • 好的。那么,假设没有实现必要的接口,并且该类被声明为 final,那么攻击者将无法克隆/序列化?我正在尝试编写一个无法克隆的类,我想知道将其设为 final 是否会阻止攻击者使其可克隆/可序列化并对其进行克隆/序列化。很抱歉这个问题,感谢您的回复。
  • Making it Final 将阻止任何人扩展它。看,如果类没有实现 Serializable/Cloneable,忘记黑客吧,即使你不能直接序列化/克隆它。他可以明确地克隆你的对象。决赛没有区别。序列化/克隆是针对对象的,我再说一遍,类的 Final 意味着您或其他任何人都无法扩展它。黑客会希望你的对象克隆而不是你的类.. 明白了吗?
  • 我想是的。如果我想让一个对象不可克隆,那么使类最终是无关紧要的。我想我应该使用 CloneNotSupportedException 之类的东西?
【解决方案2】:

我认为您可能对一些 OOP 概念及其 Java 实现不清楚。

您扩展类,同时序列化和克隆对象。

有一个Singleton pattern 只允许创建一个对象,但这是另一回事。

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 2013-01-15
    • 2015-06-01
    • 2012-02-14
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2021-03-15
    相关资源
    最近更新 更多