建站 网站程序,小红书推广有用吗,免费做网站可以一直用吗,网站关键词和网页关键词的样本java通用对象所有对象共有的方法#xff08;第3章#xff09; 这是Joshua Blochs的有效Java第3章的简短摘要。我仅包含与自己相关的项目。 一般 等值合约将等价关系描述为#xff1a; x.equals(null) false 自反 – x.equals(x) true 对称 –如果x.equals(y) true则y… java通用对象 所有对象共有的方法第3章 这是Joshua Blochs的有效Java第3章的简短摘要。我仅包含与自己相关的项目。 一般 等值合约将等价关系描述为 x.equals(null) false 自反 – x.equals(x) true 对称 –如果x.equals(y) true则y.equals(x) true 传递性 –如果x.equals(y) true和y.equals(z) true则x.equals(z) true 一致 –在相同的未修改对象上多次调用equals返回相同的值。 有一些值得注意的属性可以改变 如果违反了以上约定则其他对象如List.contains() 的行为未定义。 除非您愿意放弃OO抽象的优点否则无法在保留等值关系的同时用新的值字段/组件扩展可实例化的类。 注意如果基类是抽象的就可以了。 java.net.URL依赖于与URL关联的主机的IP地址这些主机需要网络访问因此会破坏一致性。 这本书给出了创建最佳等式的方法 检查参数this 使用的instance of检查类型是否正确 转换为正确的类型 比较重要领域 当您覆盖 哈希码由基于哈希的结构使用。 哈希码协定中最重要的部分规定相等的对象必须返回相等的哈希码。 此外哈希码函数应为不相等的对象返回不同的值以提高性能。 如果没有正确的哈希码实现则将相等的对象视为不相等的基于哈希的结构将表现不佳甚至更糟。 如果将常量值作为hashCode提供例如... return 42 则哈希表会退化为链接列表并且程序应以线性时间运行并以二次时间运行。 始终覆盖 …因为它使调试容易得多。 注意 实现Clonable使Object.clone()返回一个逐字段的副本否则将抛出CloneNotSupportedException 。 通常克隆会创建一个对象但会绕过构造函数。 实现clone存在几个挑战 通常尤其是在扩展类时在覆盖clone 应返回super.clone()返回的对象以获取正确的类型。 这不是强制性的它由用户决定但是如果没有它克隆可能会中断。 clone不会复制可变的对象字段因此super.clone()将引用相同的对象字段。 必须手动克隆字段。 从本质上讲这意味着与克隆一起使用时字段不能为“ final”除非可以共享相同的字段值。 由于clone在不使用构造函数的情况下创建对象因此必须确保创建后所有不变式都是正确的。 必须在内部列表/数组上递归调用clone 。 一般建议是避免使用和实现Object.clone() 而是使用复制构造函数public Yum(Yum yum)或工厂除非复制数组。 实施 可比较处理订单比较例如在使用TreeSet TreeMap search或sort 。 可比对象具有相似的合同即equals 如果被破坏可能会导致行为不稳定。 合同要求对称自反和传递。 equals是不符合compareTo可以创建一些集合重复。 Float和Double具有它们自己的静态compareTo方法这些方法应简化处理浮点问题。 减去整数以创建compareTo返回值时要小心因为它可能会导致溢出即在Integer.MAX_VALUE之外并创建错误的返回值 如果i为大正值而j为大负值则ij将溢出并返回负值。 翻译自: https://www.javacodegeeks.com/2017/05/effective-java-method-common-objects.htmljava通用对象