标签:
Java语言支持四种类型:接口、类、数组、基本类型
类的成员由它的域field、方法、成员类、成员接口组成。
方法的签名signature由它的名称和所有参数类型组成,签名不包括它的返回类型。
API元素:类、接口、构造器、成员、序列化形式。
第二章 创建和销毁对象 7条
第1条 用静态工厂方法替代构造器
1 public static Boolean valueOf(boolean b){ 2 3 return b?Boolean.TRUE : Boolean.False; 4 5 }
这样的好处是
1、调用的时候有方法名,可以提供更多的信息。
比存在多个入参一样的构造函数的时,用入参顺序互相区分好的多。
1 BigInteger(int,int Random); 2 3 BigInteger.makePrime(int,int Random);//多方法,可以有更多说明
2、不用再每次调用的时候都创建一个新对象。
可以让不可变类使用预先构建好的实例,或者缓存实例重复利用。
可以控制每个类都是Singleton或者不可实例化的。这样就可以用a==b代替a.equals(b)来提高性能。
3.可以返回原返回类型的任何子类型的对象,在选择返回类时有了更大的灵活性。
API可以返回对象,又不会让对象的类变成公有的。使得API变得简洁。私有的类不显示,使用public的接口调用 private static的实现。同时接口的实现还能不断的变化,对调用者透明。如:
1 public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) { 2 if (c==null) 3 return binarySearch((List<? extends Comparable<? super T>>) list, key); 4 5 if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD) 6 return Collections.indexedBinarySearch(list, key, c); 7 else 8 return Collections.iteratorBinarySearch(list, key, c); 9 } 10 11 private static <T> int indexedBinarySearch(List<? extends T> l, T key, Comparator<? super T> c) {
4、创建参数化类型实例,是的代码更简洁 (现在关于泛型的已经改进)
1 Map<String,List<String>> m = new HashMap<String,List<String>>() 2 3 //改进为 4 5 public static<K,V> HashMap<K,V> newInstance(){ 6 7 return new HashMap<K,V>(); 8 9 }
第2条 遇到多个构造器参数时要用构建器
当一个类的构造方法中需要传入许多参数,且除去几个必须的,还有很多可选的参数,可以用构建器来构建对象。这个在Google的DataStore中也比较常见。
1 //Builder Pattern 2 public class NutritionFacts{ 3 private final int servingSize; 4 private final int servings; 5 private final int fat; 6 private final int sodium; 7 8 public static class Builder{ 9 // Required param 10 private final int servings; 11 private final int servingSize; 12 13 //Optional parameters - initialized to default values 14 private int fat = 0; 15 private int sodium = 0; 16 17 public Builder(int servingSize, int servings){ 18 this.servingSize = servingSize; 19 this.servings = servings; 20 } 21 public Builder fat(int val){ 22 fat = val; 23 return this; 24 } 25 public Builder sodium(int val){ 26 sodium = val; 27 return this; 28 } 29 public NutritionFacts build(){ 30 return new NutritionFacts(this); 31 } 32 } 33 34 private NutritionFacts(Builder builder){ 35 servingSize = builder.servingSize; 36 servings = builder.servings; 37 fat = builder.fat; 38 sodium = builder.sodium; 39 } 40 }
调用:
1 NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).build();
第3条 用私有构造器或者枚举类型强化Singleton属性
标签:
原文地址:http://www.cnblogs.com/Greekjone/p/5431677.html