Effective-Java之一

对象的创建与销毁

1.用静态工厂方法代替构造器,类似go语言的func New(...)

public static Date from(Instant instant) {
    try {
        return new Date(instant.toEpochMilli());
    } catch (ArithmeticException ex) {
        throw new IllegalArgumentException(ex);
    }
}

2.遇到多个构造器参数时要考虑使用建造者模式

3.单例模式使用枚举

4.如果类不需要被实例化使用私有构造器

5.优先使用依赖注入来引入资源

6.避免创建不必要的对象,优先使用基本数据类型而非包装类型

7.消除过期对象的引用,当使用数组时注意元素移除需要将索引位置为null

8.避免使用终结方法和清除方法

9.try-with-resources由于try-finally

通用方法

10.覆盖equals方法遵守约定

11.同时覆盖hashcode方法

12.始终要覆盖toString方法

13.谨慎的覆盖clone

14.考虑实现comparable接口

将这个对象与指定的对象进行比较。当该对象小于、等于或大于指定对象的时候,分别返回一个负整数、零或者正整数

类和接口

15.类和成员的访问性最小化

16.在公有类而非公有域中使用访问方法(公有域即public的成员变量,可以在其他类中访问)

17.使可变性最小化

18.复合优先于继承(先实现需要实现的方法,再被子类继承提供能力)

19.要么使用继承提供文档说明要么禁用继承

20.接口优于抽象类

21.为后代设计接口,jdk8中的default方法

22.接口只用于定义类型,不应该被用来导出常量

23.层次优于标签类(每个子类中针对根类中每个抽象方法的相应实现)

反例:

double area() { switch(shape) { case RECTANGLE: return length * width; case CIRCLE: return Math.PI * (radius * radius); default: throw new AssertionError(shape); } }

24.静态成员类优于非静态成员类,​ 如果声明成员类不要求访问外围实例,应该静态成员类

25.限制源文件为单个顶级类

泛型

26.不要使用原生态类型

27.消除非受检警告

28.List优于数组,泛型数组是不被允许的

29.优先考虑泛型,定义类时指定泛型类型,然后将响应的类型参数替换为类型泛型,而不是使用Object[]

public class Stack<E> { private E[] elements;...}

30.利用有限通配符提升API灵活性,? extends E, ? super E

31.谨慎混用可变参数和泛型

---------------------------------------------------------------------------------------------------------------------------------

32.优先考虑类型安全的异构容器?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值