Лучший способ клонировать java.time.LocalDateTime

Я хотел бы создать копию java.time.LocalDateTime, но в ней нет метода clone().

Я делаю следующее:

long epochMilli = Instant.now().toEpochMilli();

LocalDateTime createDate =  LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault());

LocalDateTime modificationDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault());

Есть ли самый простой способ создать два объекта LocalDateTime с одним и тем же значением даты и времени?

Почему вы хотите клонировать? И имейте в виду, что все управляемые экземпляры являются естественно новыми объектами из-за функции неизменности. Так в чем ваша цель или намерение?

Meno Hochschild 14.08.2018 15:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
30
1
15 517
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Поскольку LocalDateTime неизменяем, вы можете просто сослаться на один и тот же объект:

LocalDateTime createDate = LocalDateTime.now();

LocalDateTime modificationDate = createDate;

@Eugene Неизменяемые классы считаются типами значений, их уникальность связана со значением, которое они хранят, а не там, где они находятся в памяти, нет необходимости создавать 2 отдельных экземпляра. Поскольку этот экземпляр LocalDateTime нельзя изменить, вы можете использовать его столько же ссылок.

FilipRistic 14.08.2018 15:35

@FilipRistic Придется согласиться, у меня здесь плохо: |

Eugene 14.08.2018 15:42

@FilipRistic, но возникает интересный вопрос ... что clone должен делать для типов значений, чем?

Eugene 14.08.2018 15:57

@Eugene Это действительно интересный вопрос, clone по стандарту должен возвращать новый экземпляр, но не все должно быть Cloneable. С моей точки зрения, типы значений никогда не должны быть Cloneable, поскольку нет никакого использования для создания клонов чего-то, что представляет ценность, потому что они имеют одинаковые значения, что снова делает их полностью одинаковыми. Например, никто никогда не клонирует номер 5, чтобы получить еще 5, объекты значений такие же, они связаны со значением, которое они хранят, а не с адресом памяти.

FilipRistic 14.08.2018 18:44

Поскольку LocalDateTime неизменяемый, согласно его Javadoc нет реальной причины для его клонирования.

Вы можете просто использовать один и тот же экземпляр и передавать его без необходимости клонировать его в целях защиты и терять производительность.

Поскольку он неизменен, вы можете сделать это следующим образом:

LocalDateTime copy = createDate.plusHours(0);
System.out.println(createDate.equals(copy)); // true

plusHours doc:

Returns a copy of this LocalDateTime with the specified number of hours added. This instance is immutable and unaffected by this method call.

На моей Java 10 это только что вернуло тот же объект, а не копию.

Ole V.V. 14.08.2018 16:06

@ OleV.V. Я просто прочитал исходный код, он возвращает тот же объект, когда приращение равно 0 ...

xingbin 14.08.2018 16:11
LocalDateTime orig = LocalDateTime.now();
LocalDateTime copy = LocalDateTime.from( orig );

отредактировал: этот код вернет тот же объект из источников LocalDateTime:

public static LocalDateTime from(TemporalAccessor temporal) {
       if (temporal instanceof LocalDateTime) {
          return (LocalDateTime) temporal;
       } 
       ...

На моей Java 10 это только что вернуло тот же объект, а не копию.

Ole V.V. 14.08.2018 16:05

Да, на самом деле он возвращает тот же объект

Mikhail Baksheev 14.08.2018 16:18

Другие вопросы по теме