我应该在Java中使用Clone方法吗?

j

我听说您应该在代码中避免使用它,但是由于某种原因实现了它,所以在某种情况下使用它实际上是一个好选择(还是不错的选择),还是我应该始终尝试避免它?

冒犯

乔什·布洛赫(Josh Bloch)完美地回答了这一点:

如果您已经阅读了我书中有关克隆的内容,尤其是您在两行之间阅读的话,您会知道我认为克隆已被严重打破。有一些设计缺陷,其中最大的缺陷是Cloneable接口没有克隆方法。这意味着它根本行不通:制作可克隆内容并不能说明您可以使用它做什么。相反,它说明了其内部功能。它说,如果通过重复调用super.clone最终导致调用Object的clone方法,则此方法将返回原始字段的副本。

但这并没有说明您可以对实现Cloneable接口的对象执行的操作,这意味着您无法执行多态克隆操作。如果我有一个Cloneable数组,那么您会认为我可以将该数组用完并克隆每个元素以制作该数组的深层副本,但是我做不到。您不能将某些内容强制转换为Cloneable并调用clone方法,因为Cloneable没有公共的克隆方法,Object也没有。如果尝试强制转换为Cloneable并调用clone方法,则编译器会说您正在尝试对对象调用受保护的clone方法。

可克隆性被破坏很遗憾,但是它确实发生了。最初的Java API在紧迫的期限内很快就完成了,以迎接一个封闭的市场窗口。最初的Java团队做得非常出色,但是并非所有的API都是完美的。可克隆性是一个薄弱环节,我认为人们应该意识到它的局限性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我应该在嵌套块中使用weakSelf吗?

来自分类Dev

我应该在调度块中使用“ weakSelf”吗?

来自分类Dev

我应该在GraphQL中使用列表(数组)吗?

来自分类Dev

我应该在for in结构中使用var吗?

来自分类Dev

我应该在main(){}中使用#include语句吗?

来自分类Dev

我应该在Wordpress中使用Options -Indexes吗?

来自分类Dev

我应该在Spark SQL中使用registerDataFrameAsTable吗?

来自分类Dev

我应该在Swift中使用Cocoa绑定吗?

来自分类Dev

我应该在BehaviorSubject中使用asObservable吗?

来自分类Dev

我应该在TDD中使用lambda吗?

来自分类Dev

我应该在main(){}中使用#include语句吗?

来自分类Dev

我应该在 Kotlin 的界面中使用属性吗?

来自分类Dev

在Google App Engine中,我不应该在模型中使用实例方法吗?

来自分类Dev

我应该在每个方法中使用JDBC关闭连接吗?

来自分类Dev

我应该在后台线程中使用异步方法吗?

来自分类Dev

我应该在子类中使用super()调用父类方法吗

来自分类Dev

我应该在Minecraft中使用哪个Java版本?

来自分类Dev

我应该在Minecraft中使用哪个Java版本?

来自分类Dev

我应该在Java中的方法中使用哪个访问修饰符?

来自分类Dev

.class应该在Java中使用?

来自分类Dev

我应该在我的php项目中使用`DateTimeInterface`吗?

来自分类Dev

我应该在PromiseKit块中使用[弱自我]吗?

来自分类Dev

我应该在我的药剂代码中使用Mix.Utils吗?

来自分类Dev

我应该在我的iOS Push Notification App中使用核心数据吗?

来自分类Dev

将nginx与expressJS结合使用时,我应该在express或nginx中使用压缩吗?

来自分类Dev

我应该在Django中使用通用外键吗?如何使用?

来自分类Dev

我应该在新应用程序中使用Postgres的bigserial记录吗?

来自分类Dev

我应该在Swift iOS应用中使用UIImage还是CGImage吗?

来自分类Dev

我应该在(Docker)容器中使用forever / pm2吗?

Related 相关文章

  1. 1

    我应该在嵌套块中使用weakSelf吗?

  2. 2

    我应该在调度块中使用“ weakSelf”吗?

  3. 3

    我应该在GraphQL中使用列表(数组)吗?

  4. 4

    我应该在for in结构中使用var吗?

  5. 5

    我应该在main(){}中使用#include语句吗?

  6. 6

    我应该在Wordpress中使用Options -Indexes吗?

  7. 7

    我应该在Spark SQL中使用registerDataFrameAsTable吗?

  8. 8

    我应该在Swift中使用Cocoa绑定吗?

  9. 9

    我应该在BehaviorSubject中使用asObservable吗?

  10. 10

    我应该在TDD中使用lambda吗?

  11. 11

    我应该在main(){}中使用#include语句吗?

  12. 12

    我应该在 Kotlin 的界面中使用属性吗?

  13. 13

    在Google App Engine中,我不应该在模型中使用实例方法吗?

  14. 14

    我应该在每个方法中使用JDBC关闭连接吗?

  15. 15

    我应该在后台线程中使用异步方法吗?

  16. 16

    我应该在子类中使用super()调用父类方法吗

  17. 17

    我应该在Minecraft中使用哪个Java版本?

  18. 18

    我应该在Minecraft中使用哪个Java版本?

  19. 19

    我应该在Java中的方法中使用哪个访问修饰符?

  20. 20

    .class应该在Java中使用?

  21. 21

    我应该在我的php项目中使用`DateTimeInterface`吗?

  22. 22

    我应该在PromiseKit块中使用[弱自我]吗?

  23. 23

    我应该在我的药剂代码中使用Mix.Utils吗?

  24. 24

    我应该在我的iOS Push Notification App中使用核心数据吗?

  25. 25

    将nginx与expressJS结合使用时,我应该在express或nginx中使用压缩吗?

  26. 26

    我应该在Django中使用通用外键吗?如何使用?

  27. 27

    我应该在新应用程序中使用Postgres的bigserial记录吗?

  28. 28

    我应该在Swift iOS应用中使用UIImage还是CGImage吗?

  29. 29

    我应该在(Docker)容器中使用forever / pm2吗?

热门标签

归档