JAVA编程技巧(二)

二、利用注解

2.1. 利用 Lombok 注解

Lombok 提供了一组有用的注解,可以用来消除 Java 类中的大量样板代码。

普通:

public class UserVO {
    private Long id;
    private String name;
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    ...
}

精简:

@Getter
@Setter
@ToString
public class UserVO {
    private Long id;
    private String name;
    ...
}

2.2. 利用 Validation 注解

普通:

@Getter
@Setter
@ToString
public class UserCreateVO {
    @NotBlank(message = "用户名称不能为空")
    private String name;
    @NotNull(message = "公司标识不能为空")
    private Long companyId;
    ...
}
@Service
@Validated
public class UserService {
    public Long createUser(@Valid UserCreateVO create) {
        // TODO: 创建用户 
        return null;
    }
}

精简:

@Getter
@Setter
@ToString
public class UserCreateVO {
 
    @NotBlank(message = "用户名称不能为空")
    private String name;
 
    @NotNull(message = "公司标识不能为空")
    private Long companyId;
 
    ...
 
}
 
@Service
@Validated
public class UserService {
    public Long createUser(@Valid UserCreateVO create) {
 
        // TODO: 创建用户 
 
        return null;
 
    }
}

2.3. 利用 @NonNull 注解

Spring 的 @NonNull 注解,用于标注参数或返回值非空,适用于项目内部团队协作。只要实现方和调用方遵循规范,可以避免不必要的空值判断,这充分体现了阿里的“新六脉神剑”提倡的“因为信任,所以简单”。

普通:

public List<UserVO> queryCompanyUser(Long companyId) {
    // 检查公司标识 
    if (companyId == null) {
        return null;
    }
 
    // 查询返回用户 
    List<UserDO> userList = userDAO.queryByCompanyId(companyId);
    return userList.stream().map(this::transUser).collect(Collectors.toList());
}
 
Long companyId = 1L;List<UserVO> userList = queryCompanyUser(companyId);
if (CollectionUtils.isNotEmpty(userList)) {
    for (UserVO user : userList) {
        // TODO: 处理公司用户 
    }
}

精简:

public @NonNull List<UserVO> queryCompanyUser(@NonNull Long companyId) {
    List<UserDO> userList = userDAO.queryByCompanyId(companyId);
    return userList.stream().map(this::transUser).collect(Collectors.toList());
}
 
Long companyId = 1L;List<UserVO> userList = queryCompanyUser(companyId);
for (UserVO user : userList) {
    // TODO: 处理公司用户 
}

2.4. 利用注解特性

注解有以下特性可用于精简注解声明:

1、当注解属性值跟默认值一致时,可以删除该属性赋值;

2、当注解只有 value 属性时,可以去掉 value 进行简写;

3、当注解属性组合等于另一个特定注解时,直接采用该特定注解。

普通:

@Lazy(true);
 
@Service(value = "userService")
 
@RequestMapping(path = "/getUser", method = RequestMethod.GET)

精简:

@Lazy
 
@Service("userService")
 
@GetMapping("/getUser")
正文完
 0
admin
版权声明:本站原创文章,由 admin 2015-12-11发表,共计2068字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处:https://www.mlzj.net。