首页 > 解决方案 > 在使用 ThreeTen-Backport 与 java.time 时,您是否应该完全限定包前缀?

问题描述

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

我想知道以下是否是一个好习惯。由于我们的大多数客户都在使用 Java 8,并且有一天我们可能会将所有客户升级到 Java 8,那么使用 org.threeten.bp 完全限定类名真的有意义吗?最终我们可能会将所有客户升级到 Java 8 并删除这种依赖关系,如果我们最终这样做,那么如果我们只使用没有包前缀的类名,那么代码更改就会更少。举一个代码示例,我的意思是这样。

import org.threeten.bp.LocalDate Time;

public class Example {

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

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

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

标签: javajava-8threetenbp

解决方案


只有当您同时拥有两个导入时才会发生冲突:

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

只有不import org.threeten.bp.LocalDateTime;应该引起问题。所以,你不需要完全限定任何陈述LocalDateTime datetime = ...


推荐阅读