- 类型参数:
-
R
- 查询返回的类型
- 函数式接口:
- 这是一个函数式接口,因此可以用作lambda表达式或方法引用的赋值目标。
查询时间对象的策略。
查询是从时间对象中提取信息的关键工具。它们存在以外部化查询过程,允许不同的方法,符合策略设计模式。例如,可能是一个查询,检查日期是否是闰年中2月29日的前一天,或计算距离您下一个生日还有多少天。
TemporalField
接口提供了另一种查询时间对象的机制。该接口仅限于返回一个long
。相比之下,查询可以返回任何类型。
有两种等效的使用TemporalQuery
的方式。第一种是直接在此接口上调用方法。第二种是使用TemporalAccessor.query(TemporalQuery)
:
// 这两行是等效的,但第二种方法更推荐 temporal = thisQuery.queryFrom(temporal); temporal = temporal.query(thisQuery);推荐使用第二种方法,
query(TemporalQuery)
,因为在代码中更清晰易读。
最常见的实现是方法引用,例如LocalDate::from
和ZoneId::from
。其他常见的查询作为静态方法提供在TemporalQueries
中。
- 实现要求:
- 此接口对实现的可变性没有限制,但强烈建议使用不可变性。
- 自 JDK 版本:
- 1.8
-
Method Summary
-
Method Details
-
queryFrom
查询指定的时间对象。这将查询指定的时间对象,使用实现类中封装的逻辑返回一个对象。例如,可能是一个查询,检查日期是否是闰年中2月29日的前一天,或计算距离您下一个生日还有多少天。
有两种等效的使用此方法的方式。第一种是直接调用此方法。第二种是使用
TemporalAccessor.query(TemporalQuery)
:// 这两行是等效的,但第二种方法更推荐 temporal = thisQuery.queryFrom(temporal); temporal = temporal.query(thisQuery);
推荐使用第二种方法,query(TemporalQuery)
,因为在代码中更清晰易读。- 实现要求:
-
实现必须接受输入对象并对其进行查询。实现定义查询的逻辑并负责记录该逻辑。它可以使用
TemporalAccessor
上的任何方法来确定结果。输入对象不得更改。输入时间对象可能在ISO之外的日历系统中。实现可以选择记录与其他日历系统的兼容性,或通过
查询年表
拒绝非ISO时间对象。此方法可能会被多个线程并行调用。在调用时必须是线程安全的。
- 参数:
-
temporal
- 要查询的时间对象,不能为空 - 返回值:
- 查询到的值,可能返回null表示未找到
- 抛出:
-
DateTimeException
- 如果无法查询 -
ArithmeticException
- 如果发生数值溢出
-