代码之家  ›  专栏  ›  技术社区  ›  zappee

克隆java.time.LocalDateTime的最佳方法

  •  11
  • zappee  · 技术社区  · 6 年前

    我想创建一个副本 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());
    

    4 回复  |  直到 6 年前
        1
  •  19
  •   Jacob G.    6 年前

    因为 LocalDateTime 是不可变的,您可以简单地引用同一个对象:

    LocalDateTime createDate = LocalDateTime.now();
    
    LocalDateTime modificationDate = createDate;
    
        2
  •  2
  •   Ferrybig    6 年前

    自从 LocalDateTime according to its Javadoc 没有真正的理由去克隆它。

    您只需使用同一个实例,并将其传递出去,而不必进行防御性克隆,从而降低性能。

        3
  •  2
  •   Mikhail Baksheev    6 年前
    LocalDateTime orig = LocalDateTime.now();
    LocalDateTime copy = LocalDateTime.from( orig );
    

    编辑 : 此代码将从LocalDateTime源返回相同的对象:

    public static LocalDateTime from(TemporalAccessor temporal) {
           if (temporal instanceof LocalDateTime) {
              return (LocalDateTime) temporal;
           } 
           ...
    
        4
  •  1
  •   xingbin    6 年前

    因为它是不可变的,所以可以这样做:

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

    plusHours doc :

    返回此LocalDateTime的副本,其指定数目为 增加了小时。此实例是不可变的,不受此方法的影响