将 format() 放置在 LocalDate 或 LocalTime 中的原因是什么,即使没有可能使用它的方法

What is reason of placement of format() inside LocalDate or LocalTime, even if there is no possible way of using it

提问人:Bittu 提问时间:11/10/2023 更新时间:11/10/2023 访问量:66

问:

类 LocalDate、LocalTime、LocalDateTime 是最终的,不能从中创建对象,因此不能对非静态方法 format() 进行静态引用。 此外,提到的所有三个类都仅继承自 Object 类。因此,这三个类中没有可以从中访问此方法的超类。 此方法既不来自 LocalDate、LocalTime、LocalDateTime 类实现的任何接口,也不能重写此方法,因为所有三个类都是最终的。 请向我解释上述任何类中 format() 的本质。

java java-time

评论

2赞 Gilbert Le Blanc 11/10/2023
您应该使用 Java 类,而不是扩展它们。该方法将日期和时间对象格式化为可显示的 。formatString
3赞 Jim Garrison 11/10/2023
“......是最终的,不能从中创建对象“ - 不正确。这些类可以实例化。你不能做的是扩展它们,即 你似乎混淆了.MyClass extends LocalDate...finalabstract
2赞 Old Dog Programmer 11/10/2023
我不清楚你在问什么。你有“......是最终的,对象不能从中创建,...”。这似乎是错误的。如果我有,我仍然可以实例化类型 Objects。public final class Foo { ...Foo
2赞 user85421 11/10/2023
"不能从中创建出来“,有几种工厂方法可以做到这一点,简单的例子或;并使用该方法:LocalDate.now()LocalDate.of(2023, MAY, 12)LocalDate.now().format(DateTimeFormatter.ISO_DATE)
1赞 Slaw 11/10/2023
一个具有实例方法但永远无法实例化的类确实很奇怪。幸运的是,这里的情况并非如此。类根本无法扩展;这与实例化类的能力无关。现在,您提到的类没有可见的构造函数,因此您将无法直接使用关键字实例化它们。但它们都定义了“静态工厂方法”,正如预期的那样,可以在没有实例的情况下调用这些方法。然后,可以对静态工厂方法返回的对象调用实例方法。finalnew

答:

2赞 Reilas 11/10/2023 #1

"...类 LocalDate、LocalTime、LocalDateTime 是最终的,不能从中创建对象......”

您的术语不正确。

Java 中,对象是一个,通常是一个实例

而且,当一个是用 final 关键字定义的,它不能被封装
不过,可以创建一个对象

LocalDate ld = LocalDate.of(2023, 11, 9);
LocalTime lt = LocalTime.of(12, 34);
LocalDateTime ldt = LocalDateTime.of(2023, 11, 9, 12, 34);

"...因此,不能对非静态方法 format() 进行静态引用。..."

of 方法不同,format 方法未定义为静态方法,因此您需要使用实例来访问它。

LocalTime lt = LocalTime.of(12, 34);
lt.format(DateTimeFormatter.ISO_LOCAL_TIME);