Почему у класса 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(), как объяснено ранее."