在最近做的一些项目中,使用到了关于空指针和时间类的操作。但是采用的依然是过去的操作方式。
觉得jdk8中来进行优化了,所以想要在项目中使用到新的东西来代替自己过去的东西。
用这个类来解决著名的空指针异常问题。
在我的项目中,因为我不知道content是否是空,导致了我首先得判断里面是否真的有值,如果没有值,我需要手动的set一个值进去;如果是有值的,那么就使用;而jdk8引入的optional刚刚好能够满足我的需求。
总结下里面使用的方法:
创建Optional类对象的方法:
Optional.of(T t):创建一个Optional的实例。要求of是非空的。
Optional.empty():创建一个空的Optional实例
Optional.ofNullable(T t):t可以是null
判断Optional容器中是否包含对象:
boolean isPresent():判断是否包含对象
void ifPresent(Consumer<? super T> consumer):如果有值,就执行Consumer接口的实现代码,并将该值作为参数给它。
获取Optional容器的对象:
T get():如果容器中有值,返回该值;如果没有,那么将会抛出异常;
T orElse(T other):如果有值,那么返回容器中的值;如果没有值,那么返回other对象的值;
T orElseGet(Supplier<? extends T> exceptionSupplier):如果有值则将其进行返回,否则抛出supplier接口实现的异常
方法搭配使用:
Optional.ofNullable(T t);
T orElse(T t);
public class DemoOne {
public static void main(String[] args) {
String content = null;
// 这个容器中说明了值可能是有的,也有可能是空的,就是不确定
Optional<String> content1 = Optional.ofNullable(content);
// orElse中如果有值,那么就用原来的值;如果没有值,那么使用后面的数据
content = content1.orElse("content没有值");
System.out.println(content);
}
}
public class DemoOne {
public static void main(String[] args) {
String content = "有值";
// 这个容器中说明了值可能是有的,也有可能是空的,就是不确定
Optional<String> content1 = Optional.ofNullable(content);
// 有值,那么使用原来的值
content = content1.orElse("content没有值");
System.out.println(content);
}
}
Optional.of(T t):t不能够够为空,必须是一个有值的;
T get():获取得到对象的值,如果没有值,那么返回异常。
除此之外,还提供了一种能够进行判断是否有值的方法:
boolean isPresent():判断是否包含了对象
LocalDateTime
最常用的使用方式:将字符串转换成LocalDateTime;将LocalDateTime转换成String。
这三者的关系非常容易,掌握好使用即可。
public class DemoOne {
public static void main(String[] args) {
// 获取得到当前时间
LocalDate localDate = LocalDate.now();
LocalTime now = LocalTime.now();
LocalDateTime now1 = LocalDateTime.now();
System.out.println(localDate);
System.out.println(now);
System.out.println(now1);
// 将当前时间转换成字符串
String time = "2021-12-08 12-12-12";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH-mm-ss");
LocalDateTime parse = LocalDateTime.parse(time, dateTimeFormatter);
System.out.println(parse);
System.out.println("将时间转成字符串");
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("MM-dd-yy HH:mm:ss");
String format = now1.format(dateTimeFormatter1);
System.out.println("format:"+format);
}
}
public class Test {
public static void main(String[] args) {
//1、测试时间类:将其转换成字符串
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:dd:ss");
String format = localDateTime.format(dateTimeFormatter);
System.out.println(format);
// 将字符串转换成时间类
String dateTime = "2021:05:12 20:14";
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm");
LocalDateTime parse = LocalDateTime.parse(dateTime, dateTimeFormatter1);
System.out.println(parse);
System.out.println("------------------------");
String hello = returnString("hello");
System.out.println(hello);
String s = returnString(null);
System.out.println(s);
}
public static String returnString(String str){
Optional<String> optional = Optional.ofNullable(str);
String s = optional.orElse("不传值给我,我就用这个。有值就用自己的");
return s;
}
}
原文:https://www.cnblogs.com/likeguang/p/14761665.html