良好的代码风格,既可降低代码中潜在bug数量,同时方便后续人员对项目理解和维护,Java代码语法检查工具有sonarLint,可在插件市场下载安装。
尽量遵循80字符原则,这样可保证代码在不同尺寸屏幕显示样式相同,长单行代码在小屏幕显示时会因长度过长引起自动换行,或者需要用户不断滑动屏幕才能观看,影响阅读代码体验。代码折行,第二行比第一行缩进1/2tab,第三行及之后只需第二行对齐。
需要添加空格的地方
不需要空格的地方
过深的类嵌套,很容易增加代码的复杂度,因为所有对象都要在使用之前都要进行为空判断,除非保证已经经过了初始化,否则容易引起空指针异常。
使用optional可以降低对多层嵌套对象是否为空的代码复杂度。
public class TOrderResponse {
private int code;
private Order order;
}
public class TOrder {
private TOrderItem item;// note:实际开发中一个订单应该对应多个订单项
}
public class TOrderItem {
private Coin;// 抵扣虚拟金币
}
private Class Coin {
private int number; //金币数量
private long money; // 抵扣金额
}
// 根据单个订单id查询订单信息得到tOrderResponse,然后获取订单里面的虚拟货币抵扣的金额
// 写法1:使用if
long money;
if (tOrderResponse != null) {
TOrder order = tOrderResponse.getOrder();
if (order != null) {
TOrderItem orderItem = order.getItem();
if (orderItem != null) {
Coin coin = orderItem.getCoin();
if (coin != null) {
money = coin.getMoney();
}
}
}
}
//写法2:使用Optional的链式编程进行判断
long money = Optional.ofNullable(tOrderResponse)
.map(TOrderResponse::getOrder)
.map(TOrder::getItem)
.map(TOrderItem::getCoin)
.map(Coin::getMoney)
.orElse(0L);
相比写法1,使用Option代码更加简洁,Optional中map实现
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper);
// value为null,返回一个value为空Optional对象
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));
}
}
[1] 优秀的代码风格
[2] 网站URL规范化设计的8个命名规则