深入了解Java8新特性-日期时间API之TemporalAdjusters与TemporalAdjuster

news2024/11/24 17:51:19

阅读建议

嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议:

  1. 本篇文章大概10000多字,预计阅读时间长需要10分钟。
  2. 本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章,建议收藏起来,方便时常学习与回顾,温故而知新。
  3. 创作不易,免费的点赞、关注,请走上一走,算是对博主一些鼓励,让我更有动力输出更多的干货内容。

注意

本文编写的单元测试是基于java11,具体的版本号是:11.0.19

TemporalAdjusters与TemporalAdjuster

TemporalAdjuster

TemporalAdjuster是Java 8中引入的新的日期时间API的一部分,是一个函数式接口。它能够执行复杂的日期操作,例如,可以获得下一个星期日、当月的最后一天或下一年的第一天。TemporalAdjuster只有一个带Temporal对象参数的抽象方法adjustInto(),可以通过向其传递Temporal对象在其任何实现中调用它。在TemporalAdjusters类中有许多预定义的实现,例如LocalDate、LocalDateTime等。

@FunctionalInterface
public interface TemporalAdjuster {
    Temporal adjustInto(Temporal temporal);
}

TemporalAdjusters

TemporalAdjusters也是Java 8中处理日期时间的工具类,但它的功能和TemporalAdjuster有所不同。TemporalAdjusters是一个静态工具类,提供了很多静态方法来创建TemporalAdjuster对象,这些方法可以用于对日期时间进行一些常用的调整操作,例如获取本月的第一天、下个月的第一天、本年的第一天或最后一天等。这些方法返回的TemporalAdjuster对象可以用于对日期时间进行相应的调整操作。

功能作用

TemporalAdjusters与TemporalAdjuster的作用在于提供了一种统一的、类型安全的方式来处理日期时间的操作。在过去的版本中,Java的日期时间API主要依赖于Calendar类,但这个类在处理复杂的日期时间操作时显得不够灵活和类型安全。TemporalAdjusters的出现弥补了这一缺陷,使得日期时间操作更加简洁、易用和类型安全。

TemporalAdjusters的意义在于它为Java日期时间API注入了更多的活力,使其更加适应现代应用程序的需求。通过TemporalAdjusters,开发人员可以更方便地处理日期时间的各种操作,例如添加或减去一定的时间量、获取特定时间单位的值、将日期时间转换为不同的格式等等。此外,TemporalAdjusters还支持链式调用,使得对日期时间的操作更加流畅和直观。

使用场景分析

TemporalAdjusters的使用场景非常广泛,可以应用于各种需要调整日期时间的场景。以下是一些常见的使用场景:

  • 计算日期时间差值:TemporalAdjusters提供了一组方法,可以轻松地计算两个日期时间之间的差值,例如计算两个日期之间的天数、小时数或分钟数等。
  • 获取特定时间单位的值:使用TemporalAdjusters可以方便地获取日期时间的特定时间单位的值,例如获取当前日期的年份、月份、日期等。
  • 调整日期时间:TemporalAdjusters提供了一组方法,可以对日期时间进行调整,例如在日期上添加或减去一定的时间量、将日期时间转换为不同的格式等。
  • 解析日期时间字符串:TemporalAdjusters可以用于解析日期时间字符串,并将其转换为Temporal对象。这使得开发人员可以更方便地处理日期时间的字符串表示形式。
  • 时区转换:TemporalAdjusters提供了一些方法,可以将日期时间从一个时区转换为另一个时区。这对于国际化应用程序来说非常有用,可以方便地处理不同时区之间的日期时间转换。

核心方法

TemporalAdjusters#ofDateAdjuster(...)

TemporalAdjusters.ofDateAdjuster(...) 它接受一个函数作为参数,该函数接受一个日期时间对象并返回一个新的日期时间对象,表示对该日期时间对象进行某种调整后的结果。这个方法返回一个TemporalAdjuster对象,可以用于对日期时间对象进行相应的调整操作。通常情况下,这个方法用于创建自定义的TemporalAdjuster对象,以执行一些复杂的日期时间调整操作。

@Test
public void test() {
    UnaryOperator<LocalDate> unaryOperator = item -> item.minusDays(1);//日期调节逻辑:减去1天
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.ofDateAdjuster(unaryOperator);//构造日期调节器类
    LocalDate localDate1 = LocalDate.of(2023, 11, 22);//日期:2023-11-22
    LocalDate localDate2 = localDate1.with(temporalAdjuster);//执行调节逻辑,并返回调节后结果
    System.out.println(localDate2);//输出结果:2023-11-21
}

TemporalAdjusters#firstDayOfMonth()

TemporalAdjusters.firstDayOfMonth()是一个静态方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本月的第一天。

这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test1() {
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstDayOfMonth();
    LocalDateTime localDateTime = LocalDateTime.of(2023, 11, 12, 13, 1, 12);
    LocalDateTime localDateTime1 = localDateTime.with(temporalAdjuster);
    System.out.println(localDateTime1);//输出结果:2023-11-01T13:01:12
}

TemporalAdjusters#lastDayOfMonth()

TemporalAdjusters.lastDayOfMonth()是一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本月的最后一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test2() {
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.lastDayOfMonth();
    LocalDate localDate = LocalDate.of(2023, 2, 1);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-02-28
}

TemporalAdjusters#firstDayOfNextMonth()

TemporalAdjusters.firstDayOfNextMonth() 是一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为下一个月的第一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test3() {
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstDayOfNextMonth();
    LocalDate localDate = LocalDate.of(2023, 2, 1);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-03-01
}

TemporalAdjusters#firstDayOfYear()

TemporalAdjusters.firstDayOfYear() 是一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本年的第一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test4() {
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstDayOfYear();
    LocalDate localDate = LocalDate.of(2023, 2, 1);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-01-01
}

TemporalAdjusters#lastDayOfYear()

TemporalAdjusters.lastDayOfYear() 是 一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本年的最后一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test5() {
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.lastDayOfYear();
    LocalDate localDate = LocalDate.of(2023, 2, 1);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-12-31
}

TemporalAdjusters#firstDayOfNextYear()

TemporalAdjusters.firstDayOfNextYear() 是一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为下一年度的第一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test6() {
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstDayOfNextYear();
    LocalDate localDate = LocalDate.of(2023, 2, 1);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2024-01-01
}

TemporalAdjusters#firstInMonth(...)

TemporalAdjusters.firstInMonth() 是 Java 8 中 java.time.temporal.TemporalAdjusters 类的一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本月的第一个星期几。这个方法接受一个 DayOfWeek 类型的参数,用于指定要调整到的星期几。例如,如果想要将日期调整为当前日期月份的第一个星期二,可以这样使用:

@Test
public void test7() {
    DayOfWeek dayOfWeek = DayOfWeek.of(2);
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstInMonth(dayOfWeek);
    LocalDate localDate = LocalDate.of(2023, 2, 1);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-02-07
}

TemporalAdjusters#lastInMonth(...)

TemporalAdjusters.lastInMonth() 是一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本月的最后一个星期几。这个方法接受一个 DayOfWeek 类型的参数,用于指定要调整到的星期几。例如,如果想要将日期调整为本月的最后一个星期二,可以这样使用:

@Test
public void test8() {
    DayOfWeek dayOfWeek = DayOfWeek.of(2);
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.lastInMonth(dayOfWeek);
    LocalDate localDate = LocalDate.of(2023, 2, 1);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-02-28
}

TemporalAdjusters#dayOfWeekInMonth(...)

TemporalAdjusters.dayOfWeekInMonth() 是一个静态工厂方法,用于调整日期的静态方法。这个方法可以用来将给定的日期调整为指定月份中的指定星期几的日期。

这个方法接受两个参数:

  • ordinal - 一个整数,表示月份中的第几天。范围从 1(月份的第一天)到 28、29、30 或 31(根据月份和年份而定)。
  • dayOfWeek - 一个 DayOfWeek 枚举值,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。

使用这个方法,你可以将日期调整到指定月份的特定星期几。例如,如果你想将日期调整到 11 月的第一个星期三,你可以这样使用:

@Test
public void test9() {
    DayOfWeek dayOfWeek = DayOfWeek.of(3);
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.dayOfWeekInMonth(1, dayOfWeek);
    LocalDate localDate = LocalDate.of(2023, 11, 30);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-11-01
}

TemporalAdjusters#next(...)

TemporalAdjusters.next(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法,这个方法可以用来将给定的日期调整到下一个指定星期几。这个方法接受一个 DayOfWeek 参数,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。使用这个方法,你可以将日期调整到下一个特定星期几。例如,如果你想将日期调整到下一个星期日,你可以这样使用:

@Test
public void test10() {
    DayOfWeek dayOfWeek = DayOfWeek.SUNDAY;
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.next(dayOfWeek);
    LocalDate localDate = LocalDate.of(2023, 12, 3);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-12-10
}

TemporalAdjusters#nextOrSame(...)

TemporalAdjusters.nextOrSame(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法,这个方法可以用来将给定的日期调整到下一个或相同的星期几。这个方法接受一个 DayOfWeek 参数,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。

TemporalAdjusters#nextOrSame(...)与TemporalAdjusters#next(...)区别在于:TemporalAdjusters.nextOrSame(DayOfWeek dayOfWeek) 方法将给定的日期调整到下一个或相同的星期几。这意味着,如果给定的日期已经是星期几,那么调整后的日期将与原始日期相同。否则,调整后的日期将是下一个星期几。TemporalAdjusters.next(DayOfWeek dayOfWeek) 方法将给定的日期调整到下一个星期几,不考虑原始日期是否已经是指定星期几。

假如当前日期是2023年11月30日星期四,返回下一周星期四的日期,使用TemporalAdjusters#nextOrSame(...),返回结果是2023-12-07;而使用TemporalAdjusters#nextOrSame(...)返回的则是其本身2023-11-30,除了这种特殊情况外,其余则是等同的。

@Test
public void test11() {
    DayOfWeek dayOfWeek = DayOfWeek.of(4);
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.next(dayOfWeek);
    LocalDate localDate = LocalDate.of(2023, 11, 30);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-12-07
    TemporalAdjuster temporalAdjuster1 = TemporalAdjusters.nextOrSame(dayOfWeek);
    LocalDate localDate2 = LocalDate.of(2023, 11, 30);
    LocalDate localDate3 = localDate2.with(temporalAdjuster1);
    System.out.println(localDate3);//输出结果:2023-11-30
}

TemporalAdjusters#previous(...)

TemporalAdjusters.previous(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法,这个方法可以用来将给定的日期调整到上一个星期几。这个方法接受一个 DayOfWeek 参数,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。

使用这个方法,你可以将日期调整到上一个或同一天的特定星期几。例如,如果你想将日期调整到上一个周的星期三,你可以这样使用:

@Test
public void test12() {
    DayOfWeek dayOfWeek = DayOfWeek.of(3);
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.previous(dayOfWeek);
    LocalDate localDate = LocalDate.of(2023, 11, 1);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-10-25
}

TemporalAdjusters#previousOrSame(...)

TemporalAdjusters#previousOrSame(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法,这个方法可以用来将给定的日期调整到上一个或相同的星期几。这个方法接受一个 DayOfWeek 参数,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。

TemporalAdjusters#previousOrSame(...)和TemporalAdjusters#previous(...)的区别,与上面的TemporalAdjusters#nextOrSame(...)与TemporalAdjusters#next(...)区别是类似的,不过是上面是下一周,这里是上一周。

使用这个方法,你可以将日期调整到上一个或同一天的特定星期几。例如,如果你想将日期调整到上一个或同一天的星期三,你可以这样使用:

@Test
public void test13() {
    DayOfWeek dayOfWeek = DayOfWeek.of(3);
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.previous(dayOfWeek);
    LocalDate localDate = LocalDate.of(2023, 11, 1);
    LocalDate localDate1 = localDate.with(temporalAdjuster);
    System.out.println(localDate1);//输出结果:2023-10-25
    TemporalAdjuster temporalAdjuster1 = TemporalAdjusters.nextOrSame(dayOfWeek);
    LocalDate localDate2 = LocalDate.of(2023, 11, 1);
    LocalDate localDate3 = localDate2.with(temporalAdjuster1);
    System.out.println(localDate3);//输出结果:2023-11-01
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1273446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基础操作二:Linux系统介绍

1、系统启动过程 Linux系统的启动过程并不是大家想象中的那么复杂&#xff0c;其过程可以分为5个阶段&#xff1a; 内核的引导。运行 init。系统初始化。建立终端 。用户登录系统。 1.1、内核引导 当计算机打开电源后&#xff0c;首先是BIOS开机自检&#xff0c;按照BIOS中…

六、shell编程

详见 《shell编程超详细入门教程》

enum枚举类 - Java

枚举类 一、引入二、介绍三、实现方式1、 自定义类实现枚举小结 2、 enum关键字实现枚举 四、使用enum注意事项五、练习六、enum常用方法七、练习八、enum和接口 一、引入 要求创建季节(Season)对象&#xff0c;请设计并完成。 传统方法&#xff1a; public class Enumerati…

【秒懂JDK,JRE,JVM的关系】

&#x1f320;作者&#xff1a;TheMythWS. &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 ​ JDK与JRE与JVM的关系 先用一张图来直观感受JDK JRE JVM之间的关系&#xff1a; JDK与JRE的关系 先说JDK和JRE…

绩效考核管理项目|记录2

给界面添加筛选条件并且把搜索功能实现 这段代码写入搜索方法里面就能实现功能。 private void bingdgv(){//筛选项&#xff1a;用户名、职位代码、是否辞职string userName txtUserName.Text.Trim();int baseTypeId (int)base_cbx.SelectedValue;bool isStop isdel_ckb.Che…

Loki安装部署

Loki安装部署 1、Loki介绍 Loki 是受 Prometheus 启发由 Grafana Labs 团队开源的水平可扩展&#xff0c;高度可用的多租户日志聚合系统。开发语 言: Google Go。它的设计具有很高的成本效益&#xff0c;并且易于操作。使用标签来作为索引&#xff0c;而不是对全文进行检索&…

人工智能“排头兵”,探访福州多地 AI 智算实践

生成式 AI 在 2023 年再次引爆 IT 技术发展&#xff0c;福建作为数字中国的重要策源地&#xff0c;也是国家数字经济创新发展试验区&#xff0c;在人工智能方面拥有良好的产业基础和人才优势&#xff0c;同时近期出台的《福建省促进人工智能产业发展十条措施》&#xff0c;为福…

基于web的舞蹈选课管理系统设计与实现

基于web的舞蹈选课管理系统的设计与实现 摘 要 现如今&#xff0c;学生网上选课越来越便利&#xff0c;但是大多数在线下教育机构工作的教务人员&#xff0c;在进行教务管理的时候&#xff0c;并没有完全采用信息化管理。随着选择线下教育机构的人数不断增加&#xff0c;人工…

jQuery和JavaScript的区别

一、比较原生js和jQuery的区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?

在代码中&#xff0c;采样是通过以下方式完成的&#xff1a; samples self.center np.random.uniform(-self.radius, self.radius, (num_samples, len(self.center))) 这里&#xff0c;np.random.uniform函数在每个维度独立地生成了一个介于-self.radius和self.radius之间的…

沉默是金,寡言为贵

​ 佛说&#xff1a;“人受一句话&#xff0c;佛受一柱香。”佛教的十善&#xff0c;其中有关口德就占了四样&#xff1a;恶口、妄语、两舌、绮语&#xff0c;可见口德是很重要的。言为心声&#xff0c;能说出真心的话&#xff0c;必然好听&#xff1b;假如说话言不由衷&#x…

Vue路由跳转页面刷新

案例使用映射路由 百度的时候各种操作就是没有注意keepAlive&#xff0c;发现那个为缓存开启之后前端有个小后台Vue生命周期函数失效。同一个页面刷新时这个keep Alive需要关闭。

热部署怎么部署

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言操作流程&#xff1a;在这里插入图片描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a832d83c091742eda9d9325931a89df4.png) 这里的跟上面的…

vue3+vite 批量引入局部组件及使用

目录结构 批量引入组件 例如&#xff1a;src/views/oss/components/customComponents.ts import { ref, defineAsyncComponent, markRaw } from vue;const modules import.meta.glob(./*.vue);//这告诉 TypeScript&#xff0c;components.value 是一个键为字符串、值为 define…

埃拉托色尼筛法

def is_prime(n):if n % 2 0 and n ! 2:return Falsefor i in range(3, int(math.sqrt(n) 1)):if n % i 0:return Falsereturn n ! 1def eratosthenes(n):primes []is_prime [True] * (n 1)for i in range(2, n1):if is_prime[i]:primes.append(i)# 用当前素数i去筛掉所有…

知乎禁止转载的回答怎么复制做笔记?

问题 对于“禁止转载”的回答&#xff0c;右键复制是不行的&#xff0c;ctrl-c也不行&#xff0c;粘贴之后都是当前回答的标题。稍微看了代码&#xff0c;应该是对copy事件进行了处理。不过这样真的有用吗&#xff0c;真是防君子不防小人&#xff0c;只是给收集资料增加了许多…

Spring Security 6.x 系列(7)—— 源码分析之建造者模式

一、建造者模式 WebSecurity、HttpSecurity、AuthenticationManagerBuilder 都是框架中的构建者&#xff0c;把他们放到一起看看他们的共同特点&#xff1a; 查看AuthenticationManagerBuilder的继承结构图&#xff1a; 查看HttpSecurity的继承结构图&#xff1a; 查看WebSec…

pycharm编译报错处理

1.c生成工具下载 https://visualstudio.microsoft.com/visual-cpp-build-tools/ 在这里插入图片描述 pip install pycocotools

浅谈用户体验测试的主要功能

用户体验(User Experience&#xff0c;简称UX)在现代软件和产品开发中变得愈发重要。为了确保产品能够满足用户期望&#xff0c;提高用户满意度&#xff0c;用户体验测试成为不可或缺的环节。本文将详细探讨用户体验测试的主要功能&#xff0c;以及它在产品开发过程中的重要性。…

激光雷达毫米波雷达

一.激光雷达 技术指标&#xff1a; 视场角 线数&#xff08;32/64/128&#xff09; 分辨率&#xff08;激光光束夹角越小分辨率越高&#xff0c;0.1度&#xff09; 探测距离&#xff1a;0.3-200m 反射率&#xff08;一般探测10%以上反射率的目标&#xff09; 分类 按照测距方…