Почему у класса Duration нет метода toSeconds()?
Я смотрел класс Duration в Java 8 и заметил, что у него нет:
long toSeconds();
Но у него есть все другие toXXXXX()
чтобы получить дни, часы, минуты, миллины, нано. Я вижу метод getSeconds()
который возвращает количество секунд в этом объекте длительности. Существует также метод get(TemporalUnit unit)
чтобы получить продолжительность как запрошенную единицу времени. Но почему бы не сохранить метод toSeconds()
для обеспечения согласованности?
Ответы
Ответ 1
Давайте посмотрим, что говорят документы:
Этот класс моделирует количество или количество времени в секундах и наносекундах.
Это в основном означает, что единица, используемая для хранения количества времени, представляет собой секунды. Например, чтобы сохранить длительность 5 минут и 10 наносекунд, сохраняются 300 (секунд) и 10 (наносекунды). Из-за этого нет необходимости конвертировать в секунды. Вы получаете секунды, используя getSeconds()
.
Смотрите, что я имею в виду здесь? Все другие методы преобразования в соответствующие единицы: дни, минуты, часы... Вот почему они начинают с to
, то есть convertedTo
. Поскольку вам не нужно делать преобразование, чтобы получить продолжительность в секундах, метод, который возвращает продолжительность в секундах, начинается с get
.
Ответ 2
Это известная проблема, исправление которой запланировано для Java 9: https://bugs.openjdk.java.net/browse/JDK-8142936
Новый метод добавлен в Java 9, toSeconds
. См. Исходный код.
/**
* Gets the number of seconds in this duration.
* <p>
* This returns the total number of whole seconds in the duration.
* <p>
* This instance is immutable and unaffected by this method call.
*
* @return the whole seconds part of the length of the duration, positive or negative
*/
public long toSeconds() {
return seconds;
}
Ответ 3
Потому что продолжительность
[...] моделирует количество или количество времени в секундах и наносекундах [...]
поэтому он предлагает два метода
Логических "секунд" нет, так как он уже находится в секундах.
Ответ 4
Цитата из http://tutorials.jenkov.com/java-date-time/duration.html:
"Возможно, вы спрашиваете себя, нет ли метода toSeconds(). Нет, потому что это то же самое, что и секундная часть Duration. Вы можете получить секундную часть Duration с помощью метода getSeconds(), как объяснено ранее."