Intent为啥要实现Cloneable?

Posted

技术标签:

【中文标题】Intent为啥要实现Cloneable?【英文标题】:Why does Intent implement Cloneable?Intent为什么要实现Cloneable? 【发布时间】:2015-11-22 04:04:36 【问题描述】:

为什么androidIntent实现Cloneable?是否曾经克隆过 Intent?

Intent 的clone() implementation 被破坏,因为它调用构造函数而不是调用super.clone()。 Intent 的子类在被克隆时保证会发生错误行为(对应 Android bug)。

【问题讨论】:

如果子类覆盖 clone() 并做同样的事情,则不会:调用它们自己的复制构造函数。 --- 我会说clone()有缺陷的,因为没有将返回类型更改为Intent,强制调用者强制转换,绕过Java 类型安全。 【参考方案1】:

你为什么关心clone(),你有没有使用过这个(不是为了意图,而是根本)?它在 java 中有点坏(http://www.artima.com/intv/bloch13.html),我总是使用复制构造函数来代替。

另外,据我所知,你不能真正扩展Intent。如果您这样做并尝试使用此对象启动ActivityService,您将获得android.os.BadParcelableException: ClassNotFoundException when unmarshalling

所以,我认为您不必担心clone(),尤其是Intents。

【讨论】:

以上是关于Intent为啥要实现Cloneable?的主要内容,如果未能解决你的问题,请参考以下文章

android activity之间传递对象 对象为啥要序列化

java浅克隆与深克隆

Java的clone()方法

对象的传递为啥要 序列化 呢

为啥 Java 8 的 Cloneable 中没有默认的 clone()

创建对象的第二种方式:克隆clone,要实现Cloneable接口