Вызовите метод класса из другого пакета без создания экземпляра класса - PullRequest
0 голосов
/ 16 сентября 2018

Я новичок в Java и не понял следующий фрагмент кода из здесь

SimpleDateFormat format = new SimpleDateFormat(
        "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));

После создания и экземпляра класса SimpleDateFormat из пакета java.text, используется метод setTomeZone пакета java.util.

Может ли кто-нибудь помочь мне понять, почему мы использовали метод setTimeZone с экземпляром класса SimpleDateFormat, а НЕ с экземпляром Calendar class?

Примечание. Я просмотрел несколько статей, в которых рассказывается, как вызывать метод из другого класса Java или пакета Java.Однако это казалось другим для меня.Я также заметил, что Calendar является абстрактным классом, но не может понять здесь.

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018

Пакет содержит классы, а класс содержит методы. В java.text у нас есть SimpleDateFormat класс. Если вы перейдете к public api , вы увидите, что у этого класса есть метод setTimeZone (который он наследует от класса java.text.DateFormat). Таким образом, этот метод принадлежит API класса SimpleDateFormat. Поэтому неверно говорить, что setTimeZone метод относится к java.util пакету. Последний может содержать некоторый класс, у которого есть метод с тем же именем, но эти методы не связаны.

0 голосов
/ 16 сентября 2018

После создания и экземпляра класса SimpleDateFormat из пакета java.text используется метод setTomeZone пакета Java.util.

В этом конкретном случае все классыобъявлено public, поэтому все они видны, даже если они находятся в другом пакете.Пакет здесь не имеет значения.SimpleDateFormat.setTimeZone() принимает java.util.TimeZone, поскольку параметр не является неожиданным.Пакеты - это просто папки, и иногда требуется доступ к чему-либо из другой папки.Вот и все.

Может ли кто-нибудь помочь мне понять, почему мы использовали метод setTimeZone с экземпляром класса SimpleDateFormat, а НЕ с экземпляром класса Calendar?

Поскольку целькод для анализа строки даты.Calendar не предоставляет таких возможностей.SimpleDateFormat необходимо, чтобы его часовой пояс был установлен в UTC, чтобы строка даты могла быть проанализирована в один и тот же момент времени, независимо от местного часового пояса пользователя.

0 голосов
/ 16 сентября 2018

setTimeZone

public void setTimeZone(TimeZone zone)

Устанавливает часовой пояс для календаря этого объекта DateFormat. Этот метод эквивалентен следующему вызову.

getCalendar().setTimeZone(zone)

TimeZone, установленный этим методом, перезаписывается вызовом setCalendar.

TimeZone, установленный этим методом, может быть перезаписан в результате вызова метода parse.

Параметры: zone - заданный новый часовой пояс.

https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

...