Module java.base

Interface TemporalQuery<R>

类型参数:
R - 查询返回的类型
函数式接口:
这是一个函数式接口,因此可以用作lambda表达式或方法引用的赋值目标。

@FunctionalInterface public interface TemporalQuery<R>
查询时间对象的策略。

查询是从时间对象中提取信息的关键工具。它们存在以外部化查询过程,允许不同的方法,符合策略设计模式。例如,可能是一个查询,检查日期是否是闰年中2月29日的前一天,或计算距离您下一个生日还有多少天。

TemporalField接口提供了另一种查询时间对象的机制。该接口仅限于返回一个long。相比之下,查询可以返回任何类型。

有两种等效的使用TemporalQuery的方式。第一种是直接在此接口上调用方法。第二种是使用TemporalAccessor.query(TemporalQuery)

   // 这两行是等效的,但第二种方法更推荐
   temporal = thisQuery.queryFrom(temporal);
   temporal = temporal.query(thisQuery);
 
推荐使用第二种方法,query(TemporalQuery),因为在代码中更清晰易读。

最常见的实现是方法引用,例如LocalDate::fromZoneId::from。其他常见的查询作为静态方法提供在TemporalQueries中。

实现要求:
此接口对实现的可变性没有限制,但强烈建议使用不可变性。
自 JDK 版本:
1.8
  • Method Summary

    Modifier and Type
    Method
    Description
    R
    查询指定的时间对象。
  • Method Details

    • queryFrom

      R queryFrom(TemporalAccessor temporal)
      查询指定的时间对象。

      这将查询指定的时间对象,使用实现类中封装的逻辑返回一个对象。例如,可能是一个查询,检查日期是否是闰年中2月29日的前一天,或计算距离您下一个生日还有多少天。

      有两种等效的使用此方法的方式。第一种是直接调用此方法。第二种是使用TemporalAccessor.query(TemporalQuery)

         // 这两行是等效的,但第二种方法更推荐
         temporal = thisQuery.queryFrom(temporal);
         temporal = temporal.query(thisQuery);
       
      推荐使用第二种方法,query(TemporalQuery),因为在代码中更清晰易读。
      实现要求:
      实现必须接受输入对象并对其进行查询。实现定义查询的逻辑并负责记录该逻辑。它可以使用TemporalAccessor上的任何方法来确定结果。输入对象不得更改。

      输入时间对象可能在ISO之外的日历系统中。实现可以选择记录与其他日历系统的兼容性,或通过查询年表拒绝非ISO时间对象。

      此方法可能会被多个线程并行调用。在调用时必须是线程安全的。

      参数:
      temporal - 要查询的时间对象,不能为空
      返回值:
      查询到的值,可能返回null表示未找到
      抛出:
      DateTimeException - 如果无法查询
      ArithmeticException - 如果发生数值溢出