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

时间:2018-11-30 22:14:13

标签: java java-8 threetenbp

由于我们的一位客户正在使用Java 7,因此我们在项目中使用了“三十个Backport”。“三十个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 = // ....
     } 
}

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

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

1 个答案:

答案 0 :(得分:5)

只有当您同时导入了两个文件时,才会发生冲突:

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

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

来完全限定任何语句