public enum UnitOfWeight {
KG("kg") {
@
Override public boolean match(int unit) {
return false;
}
},
GRAM("g") {
@
Override public boolean match(int unit) {
return false;
}
},
TON("t") {
@
Override public boolean match(int unit) {
return false;
}
},
UNKNOWN("x-0"){
@
Override public boolean match(int unit) {
return false;
}
@
Override public boolean unknown() {
return true;
}
};
/**
* e.g. kg, g, t
*/
@
Getter private String note;
static UnitOfWeight[] units = UnitOfWeight.values();
/**
* kg's enums
*/
static int[] kgs = {1, -1, 4};
/**
* gram's enums
*/
static int[] grams = {2, 0, 5};
/**
* ton's enums
*/
static int[] tons = {3, 1, 6};
UnitOfWeight(String note) {
this.note = note;
}
public static UnitOfWeight valueOf(Integer unit) {
for (UnitOfWeight ofWeight : units) {
if (unit == null) {
return UNKNOWN;
}
if (ofWeight.match(unit)) {
return ofWeight;
}
}
return UNKNOWN;
}
/**
* 获取对应枚举
* @
param unit
* @
return */
public abstract boolean match(int unit);
/**
* 错误的值
* @
return */
public boolean unknown() {
return false;
}
public static void main(String[] args) {
Integer unit = null;
//getUnit (type2);
UnitOfWeight ofWeight = UnitOfWeight.valueOf(unit);
if (!ofWeight.unknown()) {
String transferredUnit = ofWeight.getNote();
//...
}
}
}
根据你 append 的代码用了一个枚举来做, 根据你的描述我想有几个点需要扩展,
1. 从 pdf 解析 type 值;
2. 有很多情况(可能因为历史原因很多地方使用了不同的值代表某一个单位);
所以我建议使用枚举, 原因是:
1. 我觉得后面随着业务需要或者其他原因重构, 可能慢慢的这些代表某一个单位的值会改变或者统一为一个,所以你需要修改 通过枚举可以统一在一处,便于修改;
2. 再者也方便返回的字符值变更 总之对于变更这个枚举类基本上可以应对 90%以上的情况;
3. match 方法可以做针对行的扩展和优化;