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

ktm*_*124 2 java java-8 threetenbp

我们在项目中使用Three Ten Backport,因为我们的一个客户正在使用Java 7. Three Ten Backport为我们提供了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 = // ....
     } 
}
Run Code Online (Sandbox Code Playgroud)

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

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

Ous*_* D. 5

只有两个导入时才会发生冲突:

import org.threeten.bp.LocalDateTime;
import java.time.LocalDateTime;
Run Code Online (Sandbox Code Playgroud)

只有不import org.threeten.bp.LocalDateTime;应该导致问题.因此,您不需要完全限定任何声明LocalDateTime datetime = ...