优化:基于阿里巴巴 Java 开发手册(黄山版)优化部分方法使用

1.编程规约>OOP规约>第12条:
【强制】禁止使用构造方法 BigDecimal(double) 的方式把 double 值转化为 BigDecimal 对象。
说明:BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。
如:BigDecimal g = new BigDecimal(0.1F);实际的存储值为:0.100000001490116119384765625
正例:优先推荐入参为 String 的构造方法,或使用 BigDecimal 的 valueOf 方法,此方法内部其实执行了 Double 的
toString,而 Double 的 toString 按 double 的实际能表达的精度对尾数进行了截断。
BigDecimal recommend1 = new BigDecimal("0.1");
BigDecimal recommend2 = BigDecimal.valueOf(0.1);
2.编程规约>OOP规约>第19条:
【推荐】使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无内容的检查,
否则会有抛 IndexOutOfBoundsException 的风险。
说明:
  String str = "a,b,c,,";
  String[] ary = str.split(",");
  // 预期大于 3,结果等于 3
  System.out.println(ary.length);
This commit is contained in:
Charles7c 2023-03-03 23:14:15 +08:00
parent 1257a4bc35
commit dc751fc3ec
2 changed files with 2 additions and 2 deletions

View File

@ -72,7 +72,7 @@ public class ExcelBigNumberConverter implements Converter<Long> {
return new WriteCellData<>(str);
}
}
WriteCellData<Object> writeCellData = new WriteCellData<>(new BigDecimal(value));
WriteCellData<Object> writeCellData = new WriteCellData<>(BigDecimal.valueOf(value));
writeCellData.setType(CellDataTypeEnum.NUMBER);
return writeCellData;
}

View File

@ -65,7 +65,7 @@ public class SortQuery implements Serializable {
if (StrUtil.contains(sort[0], CharConsts.COMMA)) {
// e.g "sort=published,desc&sort=title,asc"
for (String s : sort) {
List<String> sortList = StrUtil.split(s, CharConsts.COMMA);
List<String> sortList = StrUtil.splitTrim(s, CharConsts.COMMA);
Sort.Order order =
new Sort.Order(Sort.Direction.valueOf(sortList.get(1).toUpperCase()), sortList.get(0));
orders.add(order);