来源:https://lrwinx.github.io
业务中的空值
public interface UserSearchService{
List<User> listUser();
User get(Integer id);
}
listUser()
这个接口,我经常看到如下实现:
public List<User> listUser(){
List<User> userList = userListRepostity.selectByExample(new UserExample());
if(CollectionUtils.isEmpty(userList)){//spring util工具类
return null;
}
return userList;
}
public List<User> listUser(){
List<User> userList = userListRepostity.selectByExample(new UserExample());
if(CollectionUtils.isEmpty(userList)){
return Lists.newArrayList();//guava类库提供的方式
}
return userList;
}
(List listUser())
,它一定会返回List,即使没有数据,它仍然会返回List(集合中没有任何元素);User get(Integer id)
public User get(Integer id){
return userRepository.selectByPrimaryKey(id);//从数据库中通过id直接获取实体对象
}
public interface UserSearchService{
/**
* 根据用户id获取用户信息
* @param id 用户id
* @return 用户实体
* @exception UserNotFoundException
*/
User get(Integer id);
}
public interface UserSearchService{
/**
* 根据用户id获取用户信息
* @param id 用户id
* @return 用户实体,此实体有可能是缺省值
*/
Optional<User> getOptional(Integer id);
}
public Optional<User> getOptional(Integer id){
return Optional.ofNullable(userRepository.selectByPrimaryKey(id));
}
public interface UserSearchService{
/**
* 根据用户id获取用户信息
* @param id 用户id
* @return 用户实体
* @exception UserNotFoundException
*/
User get(@NotNull Integer id);
/**
* 根据用户id获取用户信息
* @param id 用户id
* @return 用户实体,此实体有可能是缺省值
*/
Optional<User> getOptional(@NotNull Integer id);
}
public interface UserSearchService{
/**
* 根据用户id获取用户信息
* @param id 用户id
* @return 用户实体
* @exception UserNotFoundException
*/
@CheckForNull
User get(@NonNull Integer id);
/**
* 根据用户id获取用户信息
* @param id 用户id
* @return 用户实体,此实体有可能是缺省值
*/
Optional<User> getOptional(@NonNull Integer id);
}
空对象模式
@Data
static class PersonDTO{
private String dtoName;
private String dtoAge;
}
@Data
static class Person{
private String name;
private String age;
}
@Test
public void shouldConvertDTO(){
PersonDTO personDTO = new PersonDTO();
Person person = new Person();
if(!Objects.isNull(person)){
personDTO.setDtoAge(person.getAge());
personDTO.setDtoName(person.getName());
}else{
personDTO.setDtoAge('');
personDTO.setDtoName('');
}
}
static class NullPerson extends Person{
@Override
public String getAge() {
return '';
}
@Override
public String getName() {
return '';
}
}
@Test
public void shouldConvertDTO(){
PersonDTO personDTO = new PersonDTO();
Person person = getPerson();
personDTO.setDtoAge(person.getAge());
personDTO.setDtoName(person.getName());
}
private Person getPerson(){
return new NullPerson();//如果Person是null ,则返回空对象
}
@Test
public void shouldConvertDTO(){
PersonDTO personDTO = new PersonDTO();
Optional.ofNullable(getPerson()).ifPresent(person -> {
personDTO.setDtoAge(person.getAge());
personDTO.setDtoName(person.getName());
});
}
private Person getPerson(){
return null;
}
public interface UserService{
List<User> listUser(Optional<String> username);
}
“如果username是absent,是返回空集合吗?还是返回全部的用户数据集合?”
public interface UserService{
List<User> listUser(String username);
List<User> listUser();
}
Optional作为返回值
public interface UserService{
Optional<User> get(Integer id);
}
public interface UserService{
Optional<List<User>> listUser();
}
使用Optional变量
Optional<User> userOpt = ...
联系客服