当前位置: 首页 > article >正文

java Optional类与新的日期时间API

Java 8 引入了 Optional 类和新的日期时间 API,这两个特性都旨在解决旧版本 Java 中的一些常见问题,使得代码更加健壮、可读性更强。下面分别介绍 Optional 类和新的日期时间 API 的概念、用途及其使用方法。

Java 8 的 Optional 类

Optional 类是一个可以为 null 的容器对象。它被设计用来帮助开发者更好地处理那些可能为 null 的值,从而避免空指针异常(NullPointerException)。使用 Optional 类可以使代码更加安全,同时也提高了代码的可读性和可维护性。

Optional 类的主要方法
  1. Optional.of(T value):如果 value 不为 null,则创建一个 Optional 实例;否则抛出 NullPointerException
  2. Optional.ofNullable(T value):如果 value 不为 null,则创建一个 Optional 实例;否则返回一个空的 Optional 实例。
  3. Optional.empty():返回一个空的 Optional 实例。
  4. Optional.isPresent():如果值存在,则返回 true;否则返回 false
  5. Optional.orElse(T other):如果值存在,则返回该值;否则返回 other
  6. Optional.orElseGet(Supplier<? extends T> other):如果值存在,则返回该值;否则返回由 Supplier 提供的值。
  7. Optional.orElseThrow(Supplier<? extends RuntimeException> exceptionSupplier):如果值存在,则返回该值;否则抛出由 Supplier 提供的异常。
示例
public class OptionalExample {
    public static void main(String[] args) {
        String name = null;

        // 使用Optional.ofNullable避免NullPointerException
        Optional<String> optionalName = Optional.ofNullable(name);

        // 判断是否存在
        if (optionalName.isPresent()) {
            System.out.println(optionalName.get());
        } else {
            System.out.println("Name is not present.");
        }

        // 使用orElse提供默认值
        String defaultName = optionalName.orElse("Default Name");
        System.out.println(defaultName);

        // 使用orElseGet提供默认值
        String defaultName2 = optionalName.orElseGet(() -> "Default Name from Supplier");
        System.out.println(defaultName2);

        // 使用orElseThrow抛出异常
        try {
            String requiredName = optionalName.orElseThrow(() -> new IllegalArgumentException("Name must be provided"));
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }
}

Java 8 的新的日期时间 API

Java 8 引入了一个全新的日期时间 API,旨在解决旧版日期时间类(如 java.util.Datejava.util.Calendar)存在的各种问题。新的日期时间 API 更加现代、易于使用,并且支持 ISO 8601 标准。

主要类
  1. java.time.LocalDate:代表日期,不包含时间信息。
  2. java.time.LocalTime:代表时间,不包含日期信息。
  3. java.time.LocalDateTime:代表日期和时间,不包含时区信息。
  4. java.time.ZonedDateTime:代表日期、时间和时区。
  5. java.time.Instant:代表某个时刻的时间戳,通常用于网络传输。
  6. java.time.Period:代表时间段。
  7. java.time.Duration:代表持续时间。
示例
import java.time.*;

public class DateTimeExample {
    public static void main(String[] args) {
        // 获取当前日期
        LocalDate today = LocalDate.now();
        System.out.println("Today's date is " + today);

        // 获取当前时间
        LocalTime now = LocalTime.now();
        System.out.println("Current time is " + now);

        // 获取当前日期时间
        LocalDateTime nowDateTime = LocalDateTime.now();
        System.out.println("Current date and time is " + nowDateTime);

        // 设置特定日期
        LocalDate birthday = LocalDate.of(1990, Month.JANUARY, 1);
        System.out.println("Birthday is " + birthday);

        // 设置特定时间
        LocalTime meetingTime = LocalTime.of(13, 30);
        System.out.println("Meeting time is " + meetingTime);

        // 设置特定日期时间
        LocalDateTime appointment = LocalDateTime.of(2023, Month.APRIL, 15, 10, 0);
        System.out.println("Appointment is " + appointment);

        // 时区
        ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/New_York"));
        System.out.println("Current date and time in New York is " + zonedDateTime);

        // 时间戳
        Instant instant = Instant.now();
        System.out.println("Current timestamp is " + instant);

        // 日期间隔
        Period period = Period.between(LocalDate.of(2020, 1, 1), LocalDate.of(2021, 1, 1));
        System.out.println("Period between dates is " + period);

        // 时间间隔
        Duration duration = Duration.between(LocalTime.of(12, 0), LocalTime.of(13, 30));
        System.out.println("Duration between times is " + duration);
    }
}

总结

Optional 类

Optional 类是一个可以为 null 的容器对象,设计用来帮助开发者更好地处理那些可能为 null 的值,从而避免空指针异常。使用 Optional 类可以使代码更加安全,同时也提高了代码的可读性和可维护性。

新的日期时间 API

新的日期时间 API 更加现代、易于使用,并且支持 ISO 8601 标准,解决了旧版日期时间类存在的各种问题。主要类包括 LocalDateLocalTimeLocalDateTimeZonedDateTimeInstantPeriodDuration 等,涵盖了日期时间的各种操作需求。

通过使用 Optional 类和新的日期时间 API,可以显著提高 Java 应用程序的质量和可靠性。


http://www.kler.cn/news/343085.html

相关文章:

  • Spring Integration + MQTT
  • 浅谈C++之多线程处理TCP请求
  • 考研代码题:10.10 汉诺塔 爬楼梯 取球 猴子吃桃
  • 重学Java设计模式读后感之组合设计模式应用
  • OpenCV:图像直方图计算
  • 干部管理系统:实现干部全生命周期管理
  • 大学生玩转小袁口算:Python 抓包破解代码
  • 十LNMP
  • 教育部白名单赛事到底是什么?大家为什么那么重视它?
  • 宠物咖啡馆数字化解决方案:基于SpringBoot的实现
  • 链表(3)_重排链表_面试题
  • 【系统架构设计师】目录提纲
  • Jave常用的类---String类
  • Vue2基础
  • 神经网络的基本骨架——nn.Module(torch.nn里的Containers模块里的Module类)
  • 什么是WebSocket
  • Spring Boot微服务架构设计与实战
  • Java后端面试----某团一面
  • 网站集群批量管理-Ansible(ad-hoc)
  • win10 屏幕录制,4款软件让你轻松搞定!