一些编程建议
做判断时要使用正向判断
如判断字段是否有内容
- 如果场景是字段非空采取某些操作,则使用
StringUtils.hasText()
- 如果场景是字段为空采取某些操作,则使用
StringUtils.isEmpty()
注:StringUtils.isEmpty()
和StringUtils.isBlank()
是不一样的。必要时自己封装同时检查Empty和Blank的方法。
Boolean判断
不管是出于什么原因定义Boolearn对象,在判断真假时要用Boolean.TRUE.equals(boolearn_obj)
条件判断
条件判断语句,如if
里不要放太复杂或者长的语句。
例如A.equal(C) && B.equal(C)
,可以使用Arrays.asList(A, B).contains(C)
null的判断
CollectionUtils.isEmpty()
StringUtils.isEmpty()
StringUtils.hasText()
Objects.equal()
Boolean.TRUE.equals()
String类型为null时的拼接
String departureCity = null;
String arrivalCity = null;
System.out.println(departureCity+arrivalCity);
/*
输出是nullnull
null转换为String类型会转为“null”字符串
*/
MySQL的last_modify_time
一般数据库里都有个last_modify_time
字段,定义是
last_modify_time timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP
一次我通过SQL_UPDATE升级脚本,脚本是update了两条数据,第一次执行的时候成功了,last_modify_time
字段也更新了,后来我又执行了一次,但是这次last_modify_time字段的值没更新,我以为是脚本出问题了,实际上虽然我刷了两条数据,执行结果也显示影响了两行,但是由于内容没有发生改变,所以last_modify_time
值也没更新。
依次执行接口所有实现
一个接口有三个实现,则使用:
@Autowired
private List<BaseInterface> interfaceList;
public void handle() {
interfaceList.forEach(face -> face.show());
}
会依次执行每个实现的show(),不需要特别初始化。
善用Optional
原:
if (!Tools.isEmpty(getStationPinYin())) {
trainStation.setPinYin(getStationPinYin());
}
现:
Optional.ofNullable(getStationPinYin()).ifPresent(trainStation::setPinYin);
当然了,ofNullable只能判断是不是null,有时候我们需要判断StringUtils.isEmpty(),就不能直接这么用了。
Optional的层层嵌套,用于重构有层级的大量if并排代码。
return 返回Optional<>的方法1.orElseGet(() -> 返回Optional<>的方法2.orElseGet(() -> 返回Optional<>的方法3.orElse(null)));