如何为日期对象创建深层副本,例如学生的birthDate?如何复制与姓名或年龄不同的日期对象?
以下是我从网上克隆的一个例子。
import java.util.Date;
public class Clone
{
public static void main(String[] args)
{
Date d1 = new Date(90,10,5);
Object d2=d1.clone();
System.out.println("Original Date:" +d1.toString());
System.out.println("Cloned Date:" +d2.toString());
}
}
但这是一个深刻的复制?
OUTPUT原始日期:Mon Jan 05 00:00:00 IST 2018克隆日期:星期一 1月05日00:00:00 IST 2018年 -
添加额外的信息......
那么如何将代码放入我的课程中呢?
// insideCloneable class
/overriding clone() method to create a deep copy of an object.
protected Object clone()throws CloneNotSupportedException{
Employee employee = (Employee) super.clone();
return employee;
}
//implementing class - main method
Employee employee1 = new Employee(01,"John","02-11-2017");
Employee employee2 = null;
employee2=(Employee)employee1.clone();
答案 0 :(得分:2)
答案 1 :(得分:2)
newEmployee.setHiredDate( oldEmployee.getHiredDate() ) ; // No need to copy/clone an immutable `LocalDate` object.
java.time.Instant
代替java.util.Date
。 java.time.LocalDate
获取仅限日期的值。 Date
类属于麻烦的旧日期时间类,而不是现在的类,取而代之的是 java.time 类。
Instant
现代等同于Date
的是Instant
。 Instant
类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。
Instant instant = Instant.now() ; // Current moment in UTC.
您可以使用添加到旧类的新方法进行转换。
Instant instant = myJavaUtilDate.toInstant() ;
LocalDate
但是你似乎对没有时间和没有时区的仅限日期的值感兴趣。如果是,请使用LocalDate
。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) ;
LocalDate ld = LocalDate.parse( "02-11-2017" , f ) ;
java.time类使用immutable objects。 因此无需复制或克隆。只需指定相同的对象即可。
新克隆的Employee
对象获取对原始LocalDate
对象所拥有的同一Employee
对象的引用。
顺便说一句,您可以通过调用toString
将 java.time 对象序列化为标准ISO 8601格式化字符串。
String x = ld.toString() ; // Serialize object’s value as text in standard ISO 8601 format.
通过致电parse
实例化。
LocalDate ld = LocalDate.parse( "2017-02-11" ) ; // Parse text to instantiate object.
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。