Module  java.base
软件包  java.time.temporal

Interface TemporalQuery<R>

  • 参数类型
    R - 从查询返回的类型
    Functional Interface:
    这是一个功能界面,因此可以用作lambda表达式或方法引用的赋值对象。


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

    查询是从时间对象提取信息的关键工具。 它们存在于外部化查询过程,根据策略设计模式允许不同的方法。 示例可能是一个查询,检查日期是闰年前的二月二十九日前一天,还是计算下一个生日的天数。

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

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

      // these two lines are equivalent, but the second approach is recommended
       temporal = thisQuery.queryFrom(temporal);
       temporal = temporal.query(thisQuery); 
    建议使用第二种方法, query(TemporalQuery) ,因为在代码中阅读更清楚。

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

    实现要求:
    此接口对实现的可变性没有任何限制,但是强烈建议不变性。
    从以下版本开始:
    1.8
    • 方法详细信息

      • queryFrom

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

        这将查询指定的时间对象以使用实现类中封装的逻辑返回对象。 示例可能是一个查询,检查日期是闰年前的二月二十九日前一天,还是计算下一个生日的天数。

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

          // these two lines are equivalent, but the second approach is recommended
           temporal = thisQuery.queryFrom(temporal);
           temporal = temporal.query(thisQuery); 
        建议使用第二种方法, query(TemporalQuery) ,因为在代码中阅读更清楚。
        实现要求:
        实现必须接受输入对象并进行查询。 该实现定义了查询的逻辑,并负责记录该逻辑。 它可以使用TemporalAccessor上的任何方法来确定结果。 输入对象不能更改。

        输入的时间对象可以在不同于ISO的日历系统中。 实现可以选择记录与其他日历系统的兼容性,或者通过querying the chronology拒绝非ISO临时对象。

        可以从多个并行线程调用此方法。 调用时必须是线程安全的。

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