首页 > 其他 > 详细

Optional和时间类

时间:2021-05-13 00:53:23      阅读:25      评论:0      收藏:0      [点我收藏+]

在最近做的一些项目中,使用到了关于空指针和时间类的操作。但是采用的依然是过去的操作方式。

觉得jdk8中来进行优化了,所以想要在项目中使用到新的东西来代替自己过去的东西。

1、Optional

用这个类来解决著名的空指针异常问题。

在我的项目中,因为我不知道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接口实现的异常

1.1、不确定的情况

方法搭配使用:

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);
    }
}

1.2、确定的情况

Optional.of(T t):t不能够够为空,必须是一个有值的;
T get():获取得到对象的值,如果没有值,那么返回异常。
除此之外,还提供了一种能够进行判断是否有值的方法:
    boolean isPresent():判断是否包含了对象

2、时间类操作

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);

    }
}

3、练习

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;
    }
}

Optional和时间类

原文:https://www.cnblogs.com/likeguang/p/14761665.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!