Effective Java 读书笔记之六 方法

一、检查参数的有效性

  1、考虑参数有哪些限制,把限制写到文档中,在方法的开头处通过显式地检查来实施这些限制。

二、必要时进行保护性拷贝

  1、如果类具有从客户端得到或者返回的可变组件,类就必须考虑保护性拷贝这些组件。

  2、如果拷贝成本比较高,类又可以信任他的客户端,不进行拷贝保护,但要进行文档的说明。

三、谨慎设计方法签名

  1、谨慎地选择方法的名称:遵守规范,保持风格一致。

  2、不要过于追求提供便利的方法。

  3、编码过长的参数列表

    a、一个方法分解成多个方法

    b、创建辅助类,保存参数的分组。

    c、使用Builder模式

  4、对于参数类型,要优先使用接口而不是类

  5、对于boolean参数,优先使用两个元素的枚举类型。

四、慎用重载

  1、重载方法的调用是在编译时做出决定。覆盖方法的选择是在运行时做出决定。

  2、尽量不要导出多个具有相同参数数目的重载方法。

  3、不要重载具有可变参数的方法

五、慎用可变参数

六、返回零长度的数组或者集合,而不是null

  1、返回类型为数组或者集合的方法应该返回一个零长度的数组或者集合,而不是null。

七、为所有导出的API元素编写文档注释

  

  

时间: 2024-11-13 16:52:48

Effective Java 读书笔记之六 方法的相关文章

Effective Java读书笔记(3对于所有对象都通用的方法)

3.1 覆盖equals时请遵守通用约定 什么时候应该覆盖Object.equals()方法呢? 如果类具有自己特有的"逻辑相等"概念(不同于对象等同的概念),而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法. Object.equals()方法具有自反性.对称性.传递性.一致性和与null比较返回false的特点. 实现高质量equals方法的诀窍: (1)使用==操作符检查"参数是否为这个对象的引用".如果是,则返回true,这

Effective Java 读书笔记(2创建和销毁对象)

第一章是引言,所以这里不做笔记,总结一下书中第一章的主要内容是向我们解释了这本书所做的事情:指导Java程序员如何编写出清晰.正确.可用.健壮.灵活和可维护的程序. 2.1考虑用静态工厂方法代替构造器 静态工厂方法与构造器相比有四大优势: (1)静态工厂方法有名称,具有适当名称的静态工厂方法易于使用.易于阅读: (2)不必每次在调用它们的时候都创建一个新的对象: (3)可以返回原返回类型的任何子类型的对象: (4)在创建参数化类型实例的时候,它们使代码变得更加简洁. 同时静态工厂方法也有两大缺点

Effective Java读书笔记(4 类和接口)

4.1 使类和成员的可访问性最小化 要区别设计良好的模块和设计不好的模块,最重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏其内部数据和其他实现细节.设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰的隔离开来,然后模块之间只通过API进行通信,一个模块不需要知道其他模块内部的工作情况,这个概念被称为信息隐藏或封装,是软件设计的基本原则之一. 4.2 在公有类中使用访问方法而非公有域 坚持面向对象程序设计思想:如果类可以在它所在的包的外部进行访问,就提供访问方法,以保留将来改

Effective Java 读书笔记(一):使用静态工厂方法代替构造器

这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文<java中final与static的使用场景总结>. 什么是静态工厂方法? 可以参考书中的例子(摘自JDK1.7 java.lang.Boolean) public final class Boolean implements java.io.Serializable, Comparable<

Effective Java读书笔记——第三章 对于所有对象都通用的方法

第8条:覆盖equals时请遵守通用的约定 设计Object类的目的就是用来覆盖的,它所有的非final方法都是用来被覆盖的(equals.hashcode.clone.finalize)都有通用约定. 首先看看equals方法: 若满足下面的这些情况中的某一个,您可以直接使用Object类中的equals方法而不用覆盖: 类的每个实例本质上是唯一的.对于那些代表实例而不是值的类来说可以不用覆盖equals方法.比如Thread类.因为每一个Thread类的实例都表示一个线程,这与Thread某

Effective Java读书笔记——第三章 对于全部对象都通用的方法

第8条:覆盖equals时请遵守通用的约定 设计Object类的目的就是用来覆盖的,它全部的非final方法都是用来被覆盖的(equals.hashcode.clone.finalize)都有通用约定. 首先看看equals方法: 若满足以下的这些情况中的某一个,您能够直接使用Object类中的equals方法而不用覆盖: 类的每个实例本质上是唯一的.对于那些代表实例而不是值的类来说能够不用覆盖equals方法.比方Thread类.由于每个Thread类的实例都表示一个线程,这与Thread某些

Effective java读书笔记

2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.JVM.分布式之类的.在今年面试的时候深受打击,到处都是问分布式.集群的?难道现在工作两三年的都这么牛逼了?都在搞分布式.集群之类的? 2016书单如下: 1.深入理解Java虚拟机:JVM高级特性与最佳实践---(已看,预计今年看三遍) 2.Oracle查询优化改写技巧与案例---(已看) 3.Ef

effective java读书笔记1——创建和销毁对象

今天刚开始读effective java,中文版的读起来很拗口,但感觉收获很多. 另外,这本书的内容是针对Java 1.5和1.6的. 在这里整理一下第2章:创建和销毁对象 的内容. 第一条:考虑用静态工厂方法代替构造器 这一条针对的情景是要获得类的实例时.一般说来,想要获得类的实例,都是通过构造函数(书里叫做构造器). 最常见的构造函数是这样的,没有返回参数,名字和类名相同. public class A{ public A(int a){ //构造函数内容 ... } } 而所谓的静态工厂,

effective java读书笔记——对于所有对象都通用的方法

Java中的所有类都继承自Object类,Object类中有许多通用的方法,这一章要讨论的是:对于Object类中的通用方法,我们的类要不要继承,以及继承时需要注意的事项. 第1条:equals(),覆盖时请遵守通用约定 首先看一下不需要覆盖的情况: 1.类的每个实例本质上是唯一的.(比如Static的,单例的等等),这样不需要特意覆盖equals方法,用Object类的equals()方法就足够了 2.不关心类是否实现了“逻辑相等”的测试功能.我们用equals的目的就是判断两个对象是否是“逻