《effective java》之三:类和接口 博客分类: Java effectivejava
程序员文章站
2024-02-15 08:55:22
...
第13条:使类和成员的可访问性最小化:
实例域决不能是公有的。如果域是非final的,或者指向的是一个可变对象的final引用,那么一旦这个实例域变成公有,这个公有域就不是线程安全的了,很有可能出问题。
第14条:在公有类中使用访问方法而非公有域
第15条:使可变性最小化:
为了使类成为不可变,遵循下面5条原则:
* 不要提供任何会修改对象状态的方法 mutator
* 保证类不会被扩展,可将类声明为final,或者是将所有构造器变为私有或者包级私有,并添加静态工厂方法。
* 所有域都是final,并且是private的
* 确保对于任何可变组件的互斥访问
public final class Complex { private final double re; private final double im; private Complex(double re, double im) { this.re = re; this.im = im; } public static Complex valueOf(double re, double im) { return new Complex(re, im); } public static Complex valueOfPolar(double r, double theta) { return new Complex(r * Math.cos(theta), r * Math.sin(theta)); } }
第16条:复合优于继承:
只有当子类和超类确实存在is-a的关系的时候才用继承,其他一律用组合。
第17条:要么为继承而设计,并提供文档说明,要么就禁止继承:
为了允许继承,构造器绝对不能调用可被覆盖的方法。
第18条:接口优于抽象类:
第19条:接口只用于定义类型:
常量接口模式是对接口的不良使用。
如果要导出常量,有几种合理的方案:
* 如果这些常量与某个现有类或者接口紧密相关,就应该把这些常量添加到这个类或者接口中。
* 如果这些常量最好被看做枚举类型成员,就应该用枚举类型 enum type来导出这些常量。
* 如果是其他情况,则应该使用不可实例化的工具类utility class来导出这些常量。
public class PhysicalConstants { private PhysicalConstants() { } // Prevents instantiation // Avogadro's number (1/mol) public static final double AVOGADROS_NUMBER = 6.02214199e23; // Boltzmann constant (J/K) public static final double BOLTZMANN_CONSTANT = 1.3806503e-23; // Mass of the electron (kg) public static final double ELECTRON_MASS = 9.10938188e-31; }
简而言之:接口应该只是用来定义类型,它们不应该被用来导出常量。
第20条:类层次优于标签类:
第21条:用函数对象表示策略:
第22条:优先考虑静态成员类:
本人博客已搬家,新地址为:http://yidao620c.github.io/
推荐阅读
-
Effective Java读书笔记、感悟——2.1对所有对象都通用的方法之equals 博客分类: Java_SE effectivejava对象通用方法equals
-
《effective java》之一:创建和销毁对象 博客分类: Java effectivejava
-
Effective Java读书笔记、感悟——1.创建和销毁对象 博客分类: Java_SE effectivejava对象创建对象销毁
-
《effective java》之五:枚举和注解 博客分类: Java effective
-
《effective java》之三:类和接口 博客分类: Java effectivejava
-
《effective java》之二:对于所有对象都通用的方法 博客分类: Java effectivejava
-
Effective Java读书笔试之创建和销毁对象 博客分类: effective java effectivejava
-
利用反射获取父类,接口信息 博客分类: java基础 javareflect
-
进一步理解get和set 博客分类: Java EE get和set逻辑处理流程顺序实体类DTO
-
Effective Java实作Comparator - 就是爱Java 博客分类: Java EffectiveJava就是爱Java