Effective Java(第3版)
IFollowRivers
now is everything!
展开
-
Item5: 采用依赖注入来装配资源
许多类的实现通常会依赖其他资源类。大多数实现会采用以下两种方式 把资源类声明为静态实体类 弊端:静态实体类是与类绑定的,无法在类实例化的时候修改类依赖的资源实例 采用单例模式 弊端:把资源实体类定义为final,就无法改变资源类的类型。 这两种实现方式都基于了一个前提,这个类的实现只依赖资源类的一种实例。 采用依赖注入的方式可以很好地提供灵活性,当在创建类的实例的时候,才把资源类实例传给类构造...原创 2019-02-02 11:17:19 · 346 阅读 · 0 评论 -
Item2:当构造器有多个构造参数时,考虑用builder
目录 1.重叠构造器模式 2.JavaBeans模式 3.为了解决上述问题,可以考虑采用Builder 模式: 4.结合上面例子,来看一下采用Builder Pattern的几个准则: 1.内部Builder类应该有与外部类相同的属性,这样才能利用外部类的私有构造函数来设置属性值 2.外部类的构造函数必须是private类型,这样才能阻断外界利用外部类的构造器 3.在内部Builde...原创 2019-02-24 21:04:01 · 267 阅读 · 0 评论 -
item14:实现Comparable接口
Comparable接口提供一个比较的方法compareTo,该方法的入参为泛型 源码 public interface Comparable<T> { public int compareTo(T o); } 方法说明: 1.入参为泛型 2.如果两种不同类型的对象进行比较,该方法会抛出ClassCastException异常 该接口的用途 当你需要编写一个“值”类,即该类有...原创 2019-03-10 21:16:21 · 372 阅读 · 0 评论 -
Item15:最小化类和成员的可访问性
注意以下几点: 1.public static final 域要么包含基本类型,要么包含不可变对象的引用 2.如果public static final 域包含可变对象的引用,虽然该引用不能修改,但是它所引用的对象却可以被修改 3.非零长度的数组是可变类型,所以不能把数组定义为public static final 域,或者不能提供返回该域的方法。如果有的话,客户端就能够修改数组的内容,从而导致安...原创 2019-03-27 20:02:21 · 194 阅读 · 0 评论 -
Item16:在公有类中,使用接入方法而不是使用公有域
注意以下几点: 1.如果类可以被包外所访问,为了阻止外部对属性的修改,应该把属性定义为private域而不是public域,提供setter 和getter方法来访问属性 2.如果域是不可变类型,用public暴露的话,危害会小些,因为如果不改变类的API,也就不能够改变类的表示。 3.如果想暴露域的话,可以用包级私有(即默认类型)或私有内部类来暴露域,无论是可变域还是不可变域。 ...原创 2019-03-27 20:35:04 · 175 阅读 · 0 评论 -
Item17:减小可变性
成为不可变类应该遵守的5条规则: 1.不要提供修改对象的方法,比如setter方法。 2.确保类不能被扩展。禁止类被子类化,通常使用final关键字 3.使所有域final 4.使所有域private,因为这样可以阻止客户端获取可变对象的引用,从而修改该域 5.如果类有可变对象域,要确保客户端无法获取这些可变域的引用,也不要提供方法返回该域的引用,在构造器或访问方法中使用保护性拷贝技术。 (可以参...原创 2019-03-28 20:47:38 · 200 阅读 · 0 评论 -
Item18:组合优于继承
转自:https://blog.csdn.net/qq_20492999/article/details/80816922#commentBox转载 2019-04-21 11:48:05 · 165 阅读 · 0 评论 -
Item20: 接口优于抽象类
Java 8中允许接口有默认实现 抽象骨架实现。 比如原创 2019-06-14 20:57:33 · 237 阅读 · 0 评论