六、Optianal 类的使用
Optional是一个没有子类的工具类,它避免的null值出现空指针异常
案例(解释都在里面):
public class OptionalDemo extends AppApplication {
@Test
void createOptional(){
// 创建Optional的方式
//Optional.of();方法 不能传null,否则空指针异常
Optional<String> afei = Optional.of("afei");
//Optional.ofNullable();方法 可以传null和具体值
Optional<String> giao = Optional.ofNullable("giao");
Optional<String> o = Optional.ofNullable(null);
//Optional.empty() 方法就是传入一个null的方法
Optional<Object> empty = Optional.empty();
}
@Test
void methodOptional(){
/**
* Optional使用
* */
Optional<String> giao = Optional.ofNullable("giao");
Optional<String> o = Optional.ofNullable(null);
// 判断Optional是否有值isPresent();
boolean present = o.isPresent();
System.out.println(present);
// 获取值get(); 此方法不能获取null值会报错,他只能get有值的Optional
Object s = giao.get();
System.out.println(s);
// 所以get应该联合使用 例如:
String test=o.isPresent() ? o.get() : "这是个空值";
System.out.println(test);
// orElse() : 如果这个Optional有值就取出值并返回,如果没值就返回括号内的内容
String test1 =o.orElse("是空值");
System.out.println(test1);
//ifPresent() : 如果有值就调用lambda表达式的内容,如果没值null就啥也不干
giao.ifPresent(System.out::println);
}
@Test
void User_Optional(){
User user=new User(null,"18");
// 创建一个方法,将用户名转大写并返回
System.out.println( UpperCase1(user));
System.out.println( UpperCase2(user));
}
// 普通方式
private String UpperCase1(User user){
/*if(user != null){
if(user.getUserName() != null){
return user.getUserName().toUpperCase();
}else{
return null;
}
}else{
return null;
}*/
String result= user != null ? user.getUserName() != null ? user.getUserName().toUpperCase() : null : null;
return result;
}
// 使用Optional
private String UpperCase2(User user){
Optional<User> user1 = Optional.ofNullable(user);
String s1 = user1.isPresent() ? user1.map(s -> s.getUserName()).map(s -> s.toUpperCase()).orElse(null) : null;
return s1;
}
}
案例使用到的实体类:
public class User {
String userName;
String userAge;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAge() {
return userAge;
}
public void setUserAge(String userAge) {
this.userAge = userAge;
}
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", userAge='" + userAge + '\'' +
'}';
}
public User(String userName, String userAge) {
this.userName = userName;
this.userAge = userAge;
}
public User() {
}
}