04-泛型(26-33) 26. 不要使用原生态类型如果使用像 List 这样的原生态类型,就会失掉类型安全性,但是如果使用像 List<Object> 这样的参数化类型,则不会。 List 原生态类型 和 List<Object> 参数化类型的区别: 前者逃避了泛型检查 后者明确告知编译器,它能够持有任意类型的对象 不能将任何元素(除了 null 之外)放到 Collection< 2020-09-16 02_编程语言 > 01_Java > 04_EffectiveJava #EffectiveJava #泛型
05-枚举和注解(34-41) 34. 用 enum 代替 int 常量int 常量表示枚举类型: enum 类型表示枚举类型: 35. 用实例域代替序数永远不要根据枚举的序数导出与它关联的值,而是要将它保存在一个实例域中。 36. 用 EnumSet 代替位域枚举代替位域: 将 EnumSet 实例传递给 applyStyles 方法: 37. 用 EnumMap 代替序数索引java.util.EnumMap 3 2020-09-16 02_编程语言 > 01_Java > 04_EffectiveJava #注解 #EffectiveJava #枚举
06-Lambda和Stream(42-48) 42. Lambda 优先于匿名类 尽可能不要序列化一个 Lambda或匿名类实例。 千万不要给函数对象使用匿名类,除非必须创建非函数接口的类型的实例。 43. 方法引用优先于 LambdaJava提供了生成比 Lambda 更简介函数对象的方法:方法引用。 格式:类名::方法名 eg: 只要方法引用更加简介、更加清晰,就使用方法引用;反之则使用 Lambda。 44. 坚持使用标准的函数接口 2020-09-16 02_编程语言 > 01_Java > 04_EffectiveJava #Stream #Lambda #EffectiveJava
07-方法(49-56) 49. 检查参数有效性Java7 加入的 Objects.requireNonNull() 方法比较灵活且方便,因此不必再手工进行 null 检查。 50. 必要时进行保护性拷贝简而言之,如果一个类包含有从客户端得到或者返回到客户端的可变组件,这个类就必须保护性地拷贝这些组件。如果拷贝的成本受到限制,并且类信任它的客户端不会不恰当地修改组件,就可以在文档中指明客户端的职责是不得修改受到影响的组件 2020-09-16 02_编程语言 > 01_Java > 04_EffectiveJava #EffectiveJava #方法
08-通用编程(57-68) 57.将局部变量的作用域最小化要使局部变量的作用域最小化,最有力的方法就是在第一次要使用它的地方进行声明。 几乎每一个局部变量的声明都应该包含一个初始化表达式。 最后一种“将局部变量的作用域最小化”的方法是使方法小而集中。 58. for-each 循环优先于传统的 for 循环推荐增强 for 循环,或者 迭代器: 59. 使用类库从Java 7开始,就不应该再使用Random了。现在选择随 2020-09-16 02_编程语言 > 01_Java > 04_EffectiveJava #EffectiveJava #反射
10-并发(78-84) 78. 同步访问共享的可变数据synchronized 可以保证同一时刻,只有一个线程可以执行某一个方法或者代码块。 更灵活的用法可以使用 Lock 接口的实现类 ReentrantLock。 79. 避免过度同步通常,在同步的区域内做尽可能少的工作。 80. executor、task 和 stream 优先于线程如题。 81. 并发工具优先于 wait 和 notify比如 使用 Concur 2020-09-16 02_编程语言 > 01_Java > 04_EffectiveJava #EffectiveJava #并发
09-异常(69-77) 69. 只针对异常的情况才使用异常如题。 70. 对可恢复的情况使用受检异常,对编程错误使用运行时异常如题。 71. 避免不必要的使用受检异常如题。 72. 优先使用标准异常最常见的可重用异常: 73. 抛出与抽象对应的异常更高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常。这种做法称为异常转译(exception translation)。 74. 每个方法抛出的所有异常 2020-09-16 02_编程语言 > 01_Java > 04_EffectiveJava #异常 #EffectiveJava
08-责任链模式 参考资料1:http://c.biancheng.net/design_pattern/ 参考资料2:https://refactoringguru.cn/design-patterns/catalog 1. 介绍1.1 简介责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型 2020-09-12 10_设计模式 #设计模式
07-适配器模式 参考资料1:http://c.biancheng.net/design_pattern/ 参考资料2:https://refactoringguru.cn/design-patterns/catalog 1. 介绍1.1 简介适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。 属于结构型模式,它结合了两个独立接口的功能。 适配器模式通过定义一个新的接口(对要实现的功能 2020-09-12 10_设计模式 #设计模式
14-IdGenerator IdGenerator123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 2020-09-10 21_代码片段 > 01_工具类 #工具类