EffectiveJava 学习总结(三)

四、泛型(完全不懂)

五、枚举和注解

1、用enum代替int常量

  • 这个经常用,一般好像都是这么用的了,这里注意有个values()方法挺有意思

    // 物品在各个星球上的重量和质量算法
    public enum Planet {

        MERCURY(3.302e+23, 2.439e6), VENUS(4.869e+24, 6.052e6), EARTH(5.975e+24,
            6.378e6);

        private final double mass; // 质量
        private final double radius; // 半径
        private final double surfaceGravity; // 表面重力   
        private static final double G = 6.67300E-11; // 万有引力常数

        // 构造方法
        Planet(double mass, double radius) {
            this.mass = mass;
            this.radius = radius;
            surfaceGravity = G * mass / (radius * radius);
        }

        public double surfaceGravity() {
            return surfaceGravity;
        }

        // 表面质量
        public double surfaceWeight(double mass) {
            return mass * surfaceGravity; // F = ma
        }
    }

    public static void main(String[] args) {
        // 通过1kg地球重量得到质量
        double earthWeight = 1.0d;
        // 这个时候就已经初始化了所有的emun对象
        double mass = earthWeight / Planet.EARTH.surfaceGravity();

        // values() 循环取出emun对象
        for (Planet p : Planet.values())
            System.out.printf("Weight on %s is %f%n", p, p.surfaceWeight(mass));
    }
2、用实例域代替序数
  • 枚举是有顺序的,但是维护起来是噩梦
  • 所以现在都是SOLO(1), SUET(2);这样了
3、用EnumSet代替位域

    public class Text {
        public enum Style {
            BOLD, ITALIC, UNDERLINE, STRIKETHROUGH
        }

        public void applyStyles(Set