扎实的java功底系列(Effective java)1
转眼今年大三就结束了,在过一阵子就要面临找找实习,找工作的问题了。找工作之前,先把自己的java功底打好,所以暑假准备静下心来,好好看看书,为将来面试做准备,废话不多说,现在开始。
所有人都在拼命努力,不只有你受尽委屈。
考虑用静态工厂方法代替构造器
什么是静态工厂方法,在类体里面的、静态的、能够返回这个类的一个实例的方法。比如说:
public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; }
这是书里面的一个例子,用来判断一个bool型变量的真假。
那么使用静态工厂方法到底有什么好处呢?下面一一列出:
1、静态工厂方法自带名称
package serviceprovider; public class Car { private int price; private int length; private int height; private int width; private String color; private static final Car redCar = new Car("red"); private static final Car blueCar = new Car("blue"); private static final Car bestSaleCar = new Car(350000, 3, 2, 2, "blue"); public Car(int price) { super(); this.price = price; } public Car(int price, int length, int height, int width, String color) { super(); this.price = price; this.length = length; this.height = height; this.width = width; this.color = color; } public Car(String color) { super(); this.color = color; } /** * 下面是静态工厂方法 */ public static Car getRedCar(){ return redCar; } public static Car getBlueCar(){ return blueCar; } /** * 获取这个季度卖的最好的车 * @return */ public static Car getBestSaleCar(){ return bestSaleCar; } }
上面的例子中,假设一个工厂造两种颜色的车,根据体型的大小有不同的价格,那么会出现很多构造器,当参数一多,开发人员就开始迷糊了。而下面的是静态工厂方法,直接用带名字的方法返回一个实例,更加方便。
2、不用每次调用的时候都创建一个新的项目
java中对象的创建并不是任意的,因为重复创建对象会降低程序的性能,所以静态工厂方法的出现能够改善这个现象,它使用已经构建好的实例或者将构建好的实例缓冲起来,进行重复利用。
例如上面的例子,我要获取这个季度销售最好的汽车,那么我只要调用一个方法就可以实现,并不需要每次都重新创建对象。
3、它可以返回原返回类型的任何子类型对象
暂时还看不懂服务提供者框架。
4、创建参数化类型实例的时候能够使代码变得简单
类型推导,例如下面的这个例子,
//这样写很长 Map<String, List<String>> m = new HashMap<String, List<String>>(); //现在可以使用 Map<String, List<String>> m = HashMap.newInstance();
在java1.8里面,HashMap已经没有newInstance这个静态方法了,从java 1.7开始,就会根据上下文自动进行类型推断,因此可以这样写:
Map<String, List<String>> m = new HashMap<>();

浙公网安备 33010602011771号