Effective Java 读书笔记之六 方法
一、检查参数的有效性
1、考虑参数有哪些限制,把限制写到文档中,在方法的开头处通过显式地检查来实施这些限制。
二、必要时进行保护性拷贝
1、如果类具有从客户端得到或者返回的可变组件,类就必须考虑保护性拷贝这些组件。
2、如果拷贝成本比较高,类又可以信任他的客户端,不进行拷贝保护,但要进行文档的说明。
三、谨慎设计方法签名
1、谨慎地选择方法的名称:遵守规范,保持风格一致。
2、不要过于追求提供便利的方法。
3、编码过长的参数列表
a、一个方法分解成多个方法
b、创建辅助类,保存参数的分组。
c、使用Builder模式
4、对于参数类型,要优先使用接口而不是类
5、对于boolean参数,优先使用两个元素的枚举类型。
四、慎用重载
1、重载方法的调用是在编译时做出决定。覆盖方法的选择是在运行时做出决定。
2、尽量不要导出多个具有相同参数数目的重载方法。
3、不要重载具有可变参数的方法
五、慎用可变参数
六、返回零长度的数组或者集合,而不是null
1、返回类型为数组或者集合的方法应该返回一个零长度的数组或者集合,而不是null。
七、为所有导出的API元素编写文档注释
Effective Java 读书笔记之六 方法的更多相关文章
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文&l ...
- Effective Java读书笔记——第三章 对于全部对象都通用的方法
第8条:覆盖equals时请遵守通用的约定 设计Object类的目的就是用来覆盖的,它全部的非final方法都是用来被覆盖的(equals.hashcode.clone.finalize)都有通用约定 ...
- Effective java读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...
- Effective Java读书笔记完结啦
Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...
- Effective java 读书笔记(2)
第四条:通过私有构造器强化不可实例化的能力 有时可能需要编写只包含静态方法和静态域的类,这样的工具类不希望被实例化,因为实例化对它来说没有意义. 然而,在缺少显式构造器的情况下,系统会自动提供一个缺省 ...
- [Effective Java 读书笔记] 第三章 对所有对象都通用的方法 第八 ---- 九条
这一章主要讲解Object类中的方法, Object类是所有类的父类,所以它的方法也称得上是所有对象都通用的方法 第八条 覆盖equals时需要遵守的约定 Object中的equals实现,就是直接对 ...
- Effective Java读书笔记--对所有对象都通用的方法
1.覆盖equals请遵守通用规定.不需要覆写equals的场景:a.类的每个实例都是唯一的.b.类不需要提供"逻辑相等"的测试功能.c.超类已经覆盖了equals的方法.d.类是 ...
- Effective Java 读书笔记之二 对于所有对象都通用的方法
尽管Object是一个具体的类,但设计它主要是为了扩展.它的所有非final方法都有明确的通用约定.任何一个类在override时,必须遵守这些通用约定. 一.覆盖equals时请遵守通用的约定 1. ...
- 【Effective Java读书笔记】创建和销毁对象(一):考虑使用静态工厂方法代替构造器
类可以提供一个静态方法,返回类的一个静态实例,如Boolean包装类的一个获取实例的静态方法 public static Boolean valueOf(boolean b) { return (b ...
随机推荐
- linux认识第一面
一.领域问题: 在客户端领域,windows始终占据了优势地位.而在服务器领域,全球98%的都是在用linux.因为linux作为服务器的载体,便宜又安全. 二.linux是基于内核的编写工具,在li ...
- sql 中的运算符级别 如and or not
写了这么多简单的sql,很多东西忘记得差不多了,差点连最基本sql运算符优先级都忘了.平时最常用到and or的优先级都忘了 and的优先级高于or的优先级 举个例子 select * from us ...
- radar js
<!doctype html> <html> <head> <meta charset="utf-8"> <link href ...
- Java排序算法——选择排序
import java.util.Arrays; //================================================= // File Name : Select_S ...
- Java可变参数传递中可以接收多个对象
- Java字符串方法
1.字符串和字符数组的转换 .toCharArray() String str1 = "hello"; // //System.out.println(str1); char c[ ...
- JavaWeb学习笔记——开发动态WEB资源(六)ServletConfig和ServletContext
1.只有在第一次请求服务器产生实例的时候才会调用init()方法,有一种办法能在服务器一启动的时候就加载init()方法. 即服务器启动即加载Servlet,且按数字大小顺序实例化Servlet. 方 ...
- Kafka集群的安装和使用
Kafka是一种高吞吐量的分布式发布订阅的消息队列系统,原本开发自LinkedIn,用作LinkedIn的活动流(ActivityStream)和运营数据处理管道(Pipeline)的基础.现在它已被 ...
- Language Tool ,a plugin for TeXStudio
Language Tool ,a plugin for TeXStudio TexStudio supports LanguageTool as an inline grammar checker. ...
- Android签名总结
signapk.jar与eclipse export插件默认赋予程序一个DEBUG权限的签名 signapk.jar包含有系统权限(system api, permission),而eclipse e ...