热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【总结】Effectivejava经验之谈,通用方法

转载请注明出处:http:blog.csdn.netsupera_liarticledetails45034203Effectivejava系列1.Effectivejav

转载请注明出处:http://blog.csdn.net/supera_li/article/details/45034203 

Effective java系列
1.Effective java经验之谈,创建和销毁对象
2.Effective java经验之谈,泛型
3.Effective java经验之谈,类与接口
4.Effective java经验之谈,通用方法
5.Effective java经验之谈,枚举,注解,方法,通用设计,异常
6.Effective java经验之谈,并发编程

       对于通用方法,其实应用的场景是比较多的,我们在写一个类的时候,就要考虑是否要编写该方法的通用方法。这使得我们为以后该类的扩展性与使用方面提供很大的便利。

1.      覆盖equals时请遵守通用约定。自反性,对称性,传递性,一致性,非空性。编写子类equals的方法的时候,可以考虑是否可以用复合,不使用继承来解决问题。Instanceof进行参数检测,如果参数null,也将返回false。

2.      覆盖equals时总要覆盖hashCode。

       1.对象属性不变化,返回的hashcode永远相等。

       2.如果对象通过equals方法比较是相等的,那么调用这两个对象中任意一个对象的hashcode产生同样的结果

       3.对象的equals方法比较不相等,这两个对象任意的hashcode不一样

       设计equals()

       [1]使用instanceof操作符检查“实参是否为正确的类型”。

       [2]对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值。

       [2.1]对于非float和double类型的原语类型域,使用==比较;

       [2.2]对于对象引用域,递归调用equals方法;

       [2.3]对于float域,使用Float.floatToIntBits(afloat)转换为int,再使用==比较;

       [2.4]对于double域,使用Double.doubleToLongBits(adouble)转换为int,再使用==比较;

       [2.5]对于数组域,调用Arrays.equals方法。

      设计hashCode()

      [1]把某个非零常数值,例如17,保存在int变量result中;

      [2]对于对象中每一个关键域f(指equals方法中考虑的每一个域):

      [2.1]boolean型,计算(f ? 0 : 1);

      [2.2]byte,char,short型,计算(int);

      [2.3]long型,计算(int) (f ^ (f>>>32));

      [2.4]float型,计算Float.floatToIntBits(afloat);

      [2.5]double型,计算Double.doubleToLongBits(adouble)得到一个long,再[2.3];

      [2.6]对象引用,递归调用它的hashCode方法;

      [2.7]数组域,对其中每个元素调用它的hashCode方法。

      [3]将上面计算得到的散列码保存到int变量c,然后执行 result=37*result+c;

      [4]返回result。

 3.始终要覆盖toString方法。只有覆盖这个方法,其他例如Arrays.toString(),以及集合类的toString。当你某一个调用该类输出的时候,就会调用该类已经实现的toString。

4.谨慎的调用clone方法。当你为一个继承而设计的类的时候,如果无法提供安全受保护的clone,那么子类就不可能实现Cloneable,因为子类实现需要调用父类的clone。Clone方法中对可变引用对象的copy可以通过递归clone完成。总结来说,对于clone不直接使用,而采用拷贝构造器以及拷贝工厂的方案来代替他。即入参和返回都是同类。

5.考虑实现Comparable接口。对于该接口的约定参考着equals。该接口指出了实现类的内在排序,实现该接口的类,可以参与排序算法[Collections.sort()等]。可以利用该接口的约定简略代码,返回值正负与0,并不关心值是多少。


像博主这么逗比的人还有吗?委屈(卖萌吗?)



推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文探讨了在Java多线程环境下,如何确保具有相同key值的线程能够互斥执行并按顺序输出结果。通过优化代码结构和使用线程安全的数据结构,我们解决了线程同步问题,并实现了预期的并发行为。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
author-avatar
手机用户2502939177
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有