Hi!欢迎光临陕西省的权威思科、华为、Oracle、红帽、深信服、微软认证培训中心!

| 029-88235527
您现在所在位置:首页 > 新闻资讯 > 最新资讯 >

java 代码精简之利用工具方法

发布日期:2020-05-11 17:20:30点击次数:

分享到:
java 代码精简之利用工具方法

5.1.避免空值判断
 
普通:
 
if (userList != null && !userList.isEmpty()) {
    // TODO: 处理代码
}
精简:
if (CollectionUtils.isNotEmpty(userList)) {
    // TODO: 处理代码
}
5.2.避免条件判断
 
普通:
 
double result;
if (value <= MIN_LIMIT) {
    result = MIN_LIMIT;
} else {
    result = value;
}
精简:
double result = Math.max(MIN_LIMIT, value);
5.3.简化赋值语句
 
普通:
 
public static final List<String> ANIMAL_LIST;
static {
    List<String> animalList = new ArrayList<>();
    animalList.add("dog");
    animalList.add("cat");
    animalList.add("tiger");
    ANIMAL_LIST = Collections.unmodifiableList(animalList);
}
精简:
// JDK流派
public static final List<String> ANIMAL_LIST = Arrays.asList("dog", "cat", "tiger");
// Guava流派
public static final List<String> ANIMAL_LIST = ImmutableList.of("dog", "cat", "tiger");
注意:Arrays.asList 返回的 List 并不是 ArrayList ,不支持 add 等变更操作。
5.4.简化数据拷贝
 
普通:
 
UserVO userVO = new UserVO();
userVO.setId(userDO.getId());
userVO.setName(userDO.getName());
...
userVO.setDescription(userDO.getDescription());
userVOList.add(userVO);
精简:
UserVO userVO = new UserVO();
BeanUtils.copyProperties(userDO, userVO);
userVOList.add(userVO);
反例:
List<UserVO> userVOList = JSON.parseArray(JSON.toJSONString(userDOList), UserVO.class);
精简代码,但不能以过大的性能损失为代价。例子是浅层拷贝,用不着 JSON 这样重量级的武器。
5.5.简化异常断言
 
普通:
 
if (Objects.isNull(userId)) {
    throw new IllegalArgumentException("用户标识不能为空");
}
精简:
Assert.notNull(userId, "用户标识不能为空");
注意:可能有些插件不认同这种判断,导致使用该对象时会有空指针警告。
5.6.简化测试用例
 
把测试用例数据以 JSON 格式存入文件中,通过 JSON 的 parseObject 和 parseArray 方法解析成对象。虽然执行效率上有所下降,但可以减少大量的赋值语句,从而精简了测试代码。
 
普通:
 
@Test
public void testCreateUser() {
    UserCreateVO userCreate = new UserCreateVO();
    userCreate.setName("Changyi");
    userCreate.setTitle("Developer");
    userCreate.setCompany("AMAP");
    ...
    Long userId  = userService.createUser(OPERATOR, userCreate);
    Assert.assertNotNull(userId, "创建用户失败");
}
精简:
@Test
public void testCreateUser() {
    String jsonText = ResourceHelper.getResourceAsString(getClass(), "createUser.json");
    UserCreateVO userCreate = JSON.parseObject(jsonText, UserCreateVO.class);
    Long userId  = userService.createUser(OPERATOR, userCreate);
    Assert.assertNotNull(userId, "创建用户失败");
}
建议:JSON 文件名最好以被测试的方法命名,如果有多个版本可以用数字后缀表示。
5.7.简化算法实现
 
一些常规算法,已有现成的工具方法,我们就没有必要自己实现了。
 
普通:
 
int totalSize = valueList.size();
List<List<Integer>> partitionList = new ArrayList<>();
for (int i = 0; i < totalSize; i += PARTITION_SIZE) {
    partitionList.add(valueList.subList(i, Math.min(i + PARTITION_SIZE, totalSize)));
}
精简:
List<List<Integer>> partitionList = ListUtils.partition(valueList, PARTITION_SIZE);
5.8.封装工具方法
 
一些特殊算法,没有现成的工具方法,我们就只好自己亲自实现了。
 
普通:
 
比如,SQL 设置参数值的方法就比较难用,setLong 方法不能设置参数值为 null 。
 
 // 设置参数值
if (Objects.nonNull(user.getId())) {
  statement.setLong(1, user.getId());
} else {
    statement.setNull(1, Types.BIGINT);
}
...
精简:
我们可以封装为一个工具类 SqlHelper ,简化设置参数值的代码。
 
/** SQL辅助类 */
public final class SqlHelper {
    /** 设置长整数值 */
    public static void setLong(PreparedStatement statement, int index, Long value) throws SQLException {
        if (Objects.nonNull(value)) {
            statement.setLong(index, value.longValue());
        } else {
            statement.setNull(index, Types.BIGINT);
        }
    }
    ...
}
 
 // 设置参数值
SqlHelper.setLong(statement, 1, user.getId());

想了解更多IT软件学习方面的内容,欢迎到西安鸥鹏进行咨询,是专业的IT项目管理、项目开发、IT人力资源顾问公司。OPENLAB为几乎所有相关知名IT企业CISCO,MICROSOFT,REDHAT,华为,ORACLE的授权培训机构,同时是PROMETRIC和VUE授权的相关考试中心,可以组织学员参加认证考试并获得IT资格认证。为您提供最好的优质服务。