1. 判断两个对象是否相等
传统方式:
thisName != null && thisName.equals(name);
优雅方式
Objects.equals(name, thisName);
Objects.equals的源码如下:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
已经做了对空的判断
2. 判断集合是否为null
传统方式:
!(list == null || list.isEmpty());
优雅方式
import org.apache.commons.collections4.CollectionUtils;
CollectionUtils.isNotEmpty(list);
3. 使用接口参数化封装相同逻辑
传统方式:
// 发送审核员结算数据函数
public void sendAuditorSettleData() {
List<WorkerSettleData> settleDataList = auditTaskDAO.statAuditorSettleData();
for (WorkerSettleData settleData : settleDataList) {
WorkerPushData pushData = new WorkerPushData();
pushData.setId(settleData.getWorkerId());
pushData.setType(WorkerPushDataType.AUDITOR);
pushData.setData(settleData);
pushService.push(pushData);
}
}
// 发送验收员结算数据函数
public void sendCheckerSettleData() {
List<WorkerSettleData> settleDataList = auditTaskDAO.statCheckerSettleData();
for (WorkerSettleData settleData : settleDataList) {
WorkerPushData pushData = new WorkerPushData();
pushData.setId(settleData.getWorkerId());
pushData.setType(WorkerPushDataType.CHECKER);
pushData.setData(settleData);
pushService.push(pushData);
}
}
优雅方式
// 发送审核员结算数据函数
public void sendAuditorSettleData() {
sendWorkerSettleData(WorkerPushDataType.AUDITOR, () -> auditTaskDAO.statAuditorSettleData());
}
// 发送验收员结算数据函数
public void sendCheckerSettleData() {
sendWorkerSettleData(WorkerPushDataType.CHECKER, () -> auditTaskDAO.statCheckerSettleData());
}
// 发送作业员结算数据函数
public void sendWorkerSettleData(WorkerPushDataType dataType, WorkerSettleDataProvider dataProvider) {
List<WorkerSettleData> settleDataList = dataProvider.statWorkerSettleData();
for (WorkerSettleData settleData : settleDataList) {
WorkerPushData pushData = new WorkerPushData();
pushData.setId(settleData.getWorkerId());
pushData.setType(dataType);
pushData.setData(settleData);
pushService.push(pushData);
}
}
// 作业员结算数据提供者接口
private interface WorkerSettleDataProvider {
// 统计作业员结算数据
public List<WorkerSettleData> statWorkerSettleData();
}
4. 利用return提前返回函数
传统方式:
// 获取用户余额函数
public Double getUserBalance(Long userId) {
User user = getUser(userId);
if (Objects.nonNull(user)) {
UserAccount account = user.getAccount();
if (Objects.nonNull(account)) {
return account.getBalance();
}
}
return null;
}
优雅方式
// 获取用户余额函数
public Double getUserBalance(Long userId) {
// 获取用户信息
User user = getUser(userId);
if (Objects.isNull(user)) {
return null;
}
// 获取用户账户
UserAccount account = user.getAccount();
if (Objects.isNull(account)) {
return null;
}
// 返回账户余额
return account.getBalance();
}
5. 利用return删除不必要的if-else
传统方式:
// 是否通过函数
public boolean isPassed(Double passRate) {
if (Objects.nonNull(passRate) && passRate.compareTo(PASS_THRESHOLD) >= 0) {
return true;
}
return false;
}
优雅方式
// 是否通过函数
public boolean isPassed(Double passRate) {
return Objects.nonNull(passRate) && passRate.compareTo(PASS_THRESHOLD) >= 0;
}
5. 内部函数参数尽量使用基础类型
传统方式:
// 调用代码
double price = 5.1D;
int number = 9;
double total = calculate(price, number);
// 计算金额函数
private double calculate(Double price, Integer number) {
return price * number;
}
优雅方式
// 调用代码
double price = 5.1D;
int number = 9;
double total = calculate(price, number);
// 计算金额函数
private double calculate(double price, int number) {
return price * number;
}
内部函数尽量使用基础类型,避免了隐式封装类型的打包和拆包,避免了内部函数的参数空指针判断,避免了调用函数的返回值空指针判断。