1、考虑用静态工厂方法代替构造器
优点1:静态工程方法有名称,可以选择行创建多个实例,具有适当名称的静态方法更容易使用;
优点2:不必每次都创建一个新对象
优点3:可以返回原返回类型的任何子类型的对象
优点4:在创建参数化类型实例的时候,可以使代码变的更加简洁
Map> m = new HashMap>();
public strtic<K<V> HashMap<K,V> newInstance(){
return new HashMap<K,V>();
}
Map<String,List<String>> m = HashMap.newInstance();
缺点1:如果不含共有或者保护类型的构造器,则不能被子类化
缺点2:与其他静态方法实际上没有任何区别。
2、遇到多个构造器参数时要考虑使用构建器(建造者模式)
当构造器有多个参数数,可以使用JavaBean模式进行优化,但是会阻止把类做成不可变的可能(参数传递和构造函数不同步会导致线程不安全)
先调用类的builder方法创建一个builder,再用setter设置各个参数(注意使用return this;可以构造参数链),最后调用builder返回一个类
NutritionFacts cocaCola = new NutritionFacts.Buildr(240,8).calories(100).sodium(35).build();
3、使用私有构造器或者枚举类型强化Singleton属性
单例方法常有三种方式
1)静态final属性域 2)、静态工厂方法 3)、包含单元素的枚举类型
前两种方式通过借助AccessibleObject.setAccessible方法 同样可以访问,而且还是可序列化的
4、通过私有构造器强化不可被实例化的类的特性
避免使用默认的构造函数实例化,避免子类化访问。
5、避免创建不必要的对象
String s = new String("test); 每次调用都会创建新对象 可用String s = ”test"改进
当在一项操作中混合使用基本类型与包装类型时,包装类型会自动拆箱处理。
基本情况下,基本类型已经完胜了包装类型。但是在如下三个地方,包装类型的使用会更合理:
1、作为集合中的元素、键和值。
2、在参数化类型中。比如:你不能这样写——ArryList,你只能写ArrayList.
3、在进行反射方法的调用时。
总之,当可以选择时候,基本类型是要优先于包装类型。基本类型更加简单、更加快速。