码迷,mamicode.com
首页 > 编程语言 > 详细

《Effective Java》笔记

时间:2016-04-25 17:58:24      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

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(intint 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属性

 

《Effective Java》笔记

标签:

原文地址:http://www.cnblogs.com/Greekjone/p/5431677.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!