Должны ли вы полностью определять префикс пакета при использовании ThreeTen-Backport вместо java.time?
Мы используем Three Ten Backport в нашем проекте, так как один из наших клиентов использует Java 7. Three Ten Backport предоставляет нам новую функциональность даты и времени (java.time.*), Представленную в Java 8.
Я хотел бы знать, является ли следующее хорошей практикой. Поскольку большинство наших клиентов используют 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 получит приоритет и будет загружена, но я могу ошибаться.
Это хорошая практика? Или он может генерировать предупреждения / ошибки компилятора? Даже если он не генерирует никаких предупреждений или ошибок, может ли это быть плохой практикой? Я испытываю желание сделать это, потому что полная классификация класса пакетом просто уродлива, и если мы в конечном итоге удалим зависимость Three Three, то нам придется изменить каждый экземпляр этого кода, вместо того, чтобы просто удалять операторы import. Рад слышать ваши мысли.
1 ответ
Столкновение будет только тогда, когда у вас есть оба импорта:
import org.threeten.bp.LocalDateTime;
import java.time.LocalDateTime;
Имея только import org.threeten.bp.LocalDateTime;
не должно вызывать проблемы. Таким образом, вам не нужно полностью квалифицировать любое утверждение с LocalDateTime datetime = ...