美文网首页
effective java的一点学习

effective java的一点学习

作者: yyyfor | 来源:发表于2017-07-23 20:55 被阅读0次

许多人力推的一本书,真正看了有种相见恨晚的感觉。书中描述了很多平时没有注意到的细节和实现方式

1.考虑用静态工厂代替构造器

优势在于:
1.它们有名称
2.不必在每次调用它们的时候都创建一个新的对象
3.它们可以返回原返回类型的任何子类型的对象
4.在创建参数化类型的实例的时候,它们使代码变得更加简洁

缺点在于:
1.类如果不含公有的或者受保护的构造器,就不能被子类化
2.它们与其他的静态方法实际没有任何区别

惯用名称:

valueOf
of
getInstance
newInstance
getType
newType

2.遇到多个构造器参数时要考虑构建器

package test;

public class NutritionFacts {

    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;
    
    public static class Builder {
        private final int servingSize;
        private final int servings;
        
        private int calories = 0;
        private int fat = 0;
        private int sodium = 0;
        private int carbohydrate = 0;
        
        public Builder(int servingSize, int servings) {
            this.servingSize = servingSize;
            this.servings = servings;
        }
        
        public Builder calories(int val) {
            calories = val; return this;
        }
        public Builder fat(int val) {
            fat = val; return this;
        }
        public Builder sodium(int val) {
            sodium = val; return this;
        }
        public Builder carbohydrate(int val) {
            carbohydrate = val; return this;
        }
        
        public NutritionFacts build() {
            return new NutritionFacts(this);
        }
        
    }
    
    private NutritionFacts(Builder builder) {
        servingSize = builder.servingSize;
        servings = builder.servings;
        fat = builder.fat;
        calories = builder.calories;
        sodium = builder.sodium;
        carbohydrate = builder.carbohydrate;
        
    }
    
    
    
}

如果类的构造器或者静态工厂具有多个参数,设计这种类,Builder模式是不错的选择

3.使用私有构造器或者枚举类型强化Singleton属性

public enum Singleton {
      INSTANCE;
}

单元素的枚举类型已经成为实现Singleton的最佳方式

4.通过私有构造器强化不可实例化的能力

java.lang.Math或者java.util.Arrays

5.避免创造不必要的对象

构造器在每次调用的时候都会创建一个新的对象,静态工厂从来不要求这么做

6.消除过期的对象引用

1.只要类自己管理内存,就应该警惕内存泄漏问题
2.缓存
3.监听器和其他回调

相关文章

网友评论

      本文标题:effective java的一点学习

      本文链接:https://www.haomeiwen.com/subject/zynmkxtx.html