1.概述:
Java assert关键字允许开发人员快速验证程序的某些假设或状态。
2.断言怎么使用
1. 需要先配置JVM参数,默认Idea是关闭断言(assert)的;
设置一下jvm的参数,参数是-enableassertions或者-ea(推荐)。
2.书写格式
格式1:
assert [boolean 表达式]
例如:
int a=10/5;
asssert a>2;
结果:
格式2:
assert [boolean 表达式 : 错误表达式 (日志)]
例如:
int a=10/5;
assert a>5:"出现异常";
结果:
3.项目中如何使用
- 当我们更新接口的时候,需要判断是否是当前部门,如果不是就报异常,不使用(Assert)断言的写法:
@PostMapping(value = EVENT_UPDATE)
@LogAction("更新")
public Rest<Void> update(@RequestBody @Validated WorkOrderEventParam condition) {
if (!verifyDeptId(condition.getDeptId())) new RuntimeException("无法修改其他部门事件");
workOrderEventService.update(condition);
return RestBody.ok();
}
/**
* 校验当前是否是同一部门
*/
public boolean verifyDeptId(Long deptId) {
//获取用户所属部门
Long currentDeptId = 0L;
final UserValueObject user = getCurrentUserInfo();
if (user != null && CollectionUtil.isNotEmpty(user.getDepartments()))
currentDeptId = user.getDepartments().get(0).getId();
return currentDeptId.equals(deptId);
}
会发现,我们需要做if判断,又需要抛出异常,增加代码的冗余度;
- 使用(Assert)断言的写法:
@PostMapping(value = EVENT_UPDATE)
@LogAction("更新")
public Rest<Void> update(@RequestBody @Validated WorkOrderEventParam condition) {
verifyDeptId(condition.getDeptId());
workOrderEventService.update(condition);
return RestBody.ok();
}
/**
* 校验当前是否是同一部门
*/
public void verifyDeptId(Long deptId) {
//获取用户所属部门
Long currentDeptId = 0L;
final UserValueObject user = getCurrentUserInfo();
if (user != null && CollectionUtil.isNotEmpty(user.getDepartments()))
currentDeptId = user.getDepartments().get(0).getId();
//判断传进来的部门id是否和当前部门id一致
//使用java断言验证
assert currentDeptId.equals(deptId) : "当前部门无法修改该事件";
}
会发现,我们根本不需要在Controller接口中做出多余的if判断和throw抛异常,只关注调用service业务方法即可,既增加了代码的可读性,也较少了代码的冗余性;