Java中关于引用变量的问题

十秒耿直拆包选手 2019-11-25 06:27:48
在java中的ref type数据有两个变量引用同一个实例的情况。一般来说可以使用“(类) obj.clone()”方法复制实例。

我在使用openjdk11中发现有个类没法使用clone方法。不知道有人遇到同样的情况么?该怎么处理?
比如:java.time.LocalDate我在使用是发现没有clone方法。
...全文
193 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-11-26
  • 打赏
  • 举报
回复
引用 4 楼 太空堡垒185 的回复:
[quote=引用 1 楼 qybao 的回复:]
这个类不提供克隆方法的
遇到这种情况,看你需要深克隆还是浅克隆,自己写个方法

应该要求自己写method,根据LocalDate的值创建一个新的实例返回吧。刚才没有注意到LocalDate是final类,而且constructor都private。[/quote]

没有构造方法可以变相生成实例
for example
LocalDate ld1 = LocalDate.now(); //原来实例
LocalDate ld2 = LocalDate.now(); //变相生成新实例
ld2.adjustInto(ld1); //ld2校准为ld1
System.out.println(ld1==ld2); //false 说明不是同一个对象
System.out.println(ld1.equals(ld2)); //true 说明时间信息相同

jiawenhe123 2019-11-26
  • 打赏
  • 举报
回复
实现对象的深拷贝常用的方式有3种: 1.使用序列化技术。 2.使用构造方法或者工厂方法拉取所有状态属性,创建一个新对象。 3.使用自定义的deepcopy实现工具,例如你可以使用apache 的BeanUtils轻松实现拷贝, 它内部使用了json序列化的方法(也可以使用marshalling或者protobuf实现)。 4.使用clone方法。 如果原对象没有提供clone方法,强烈建议不要使用clone,大多时候也不能使用。 除非你需要处理数组拷贝,否则不要使用clone,建议使用BeanUtils处理
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
这个类不提供克隆方法的
遇到这种情况,看你需要深克隆还是浅克隆,自己写个方法

应该要求自己写method,根据LocalDate的值创建一个新的实例返回吧。刚才没有注意到LocalDate是final类,而且constructor都private。
  • 打赏
  • 举报
回复
引用 2 楼 KeepSayingNo 的回复:
clone 方法本身就不可用吧,protected native Object clone()
我的意思是java本身没有提供clone方法,java给Date类提供了clone方法,看来还是有选择提供。
KeepSayingNo 2019-11-25
  • 打赏
  • 举报
回复
clone 方法本身就不可用吧,protected native Object clone()
qybao 2019-11-25
  • 打赏
  • 举报
回复
这个类不提供克隆方法的
遇到这种情况,看你需要深克隆还是浅克隆,自己写个方法

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧