您的位置:首页 > Web前端

Effective java -- 5 枚举和注解

2017-01-17 09:15 288 查看
第三十条:用enum代替int常量
enum的简单用法。

enum Operation {
PLUS("+") {
double apply(double x, double y) {
return x + y;
}
},
MINUS("-") {
double apply(double x, double y) {
return x - y;
}
};

private final String symbol;

private Operation(String symbol) {
this.symbol = symbol;
}

@Override
public String toString() {
return symbol.toString();
}

abstract double apply(double x, double y);
}


第三十一条:用实例域代替序数
就是向上面那样将symbol换成一个int类型的值用于标记实例。

第三十二条:用EnumSet代替位域(没用过位域,还不太懂)

第三十三条:用EnumSet代替序数索引
就是告诉别用ordinal()方法,这个基本上对于程序来说没有用。不要将ordernal的方法的返回值作为索引。
EnumMap的用法

public enum Phase {
SOLID, LIQUID, GAS;
public enum Transition {
MELT(SOLID, LIQUID), FREEZE(LIQUID, SOLID), BOIL(LIQUID, GAS), CONDENSE(GAS, LIQUID);

private final Phase src;
private final Phase des;

private Transition(Phase src, Phase des) {
this.src = src;
this.des = des;
}

private static final Map<Phase, Map<Phase, Transition>> MAP =
new EnumMap<Phase, Map<Phase, Transition>>(Phase.class);

static {
for (Phase phase : Phase.values())
MAP.put(phase, new EnumMap<Phase, Transition>(Phase.class));

for (Transition transition : Transition.values()) {
MAP.get(transition.src).put(transition.des, transition);
}
}
}
}


和其他类型的map差不多,就是最后需要加上Key.class。

第三十四条:用接口模拟可伸缩的枚举

枚举间不可继承,但是枚举可实现接口。

第三十五条:注解优于命名格式

第三十六条:坚持使用Override注解

第三十七条:用标记接口定义类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: