使用 ThreeTen-Backport 与 java.time 时是否应该完全限定包前缀?

Should you fully qualify the package prefix when using ThreeTen-Backport versus java.time?

我们在项目中使用了三十向后移植,因为我们的一位客户正在使用 Java 7. 三十向后移植为我们提供了新的日期时间功能 (java.time.*)在 Java 8.

中介绍

我想知道以下做法是否合适。由于我们的大多数客户都在使用 Java 8,并且有一天我们可能会将所有客户升级到 Java 8,因此使用 [=22= 完全限定 class 名称真的有意义吗]?最终我们可能会将所有客户升级到 Java 8 并删除此依赖项,如果我们最终这样做,那么如果我们只使用不带包前缀的 class 名称,代码更改将会更少。举个代码例子,我的意思是这样的。

import org.threeten.bp.LocalDate Time;

public class Example {

     public void example() {
          LocalDateTime datetime = // ....
     } 
}

您可以在示例中看到我引用没有包前缀的 LocalDateTime。在Java 8中,会加载java.time.LocalDateTime class,还是加载org.threeten.bp.LocalDateTime?有点不清楚,因为在这段代码中,在 Java 8 中,有两个 LocalDateTime 浮动,一个来自 java.time,另一个来自 org.threeten.bp。我假设本机 Java 库将被优先加载,但我可能错了。

这样做是好的做法吗?或者它可以生成编译器 warnings/errors 吗?即使它没有产生任何警告或错误,它是否仍然是一种不好的做法?我很想这样做,因为通过包完全限定 class 简直是丑陋的,如果我们最终删除了三个十个依赖项,那么我们将不得不更改该代码的每个实例,而不仅仅是删除导入语句。很高兴听到你的想法。

只有当你同时导入时才会有冲突:

import org.threeten.bp.LocalDateTime;
import java.time.LocalDateTime;

只有 import org.threeten.bp.LocalDateTime; 应该不会造成问题。因此,您不需要使用 LocalDateTime datetime = ...

完全限定任何语句