AIDL 中的 Parcelize 注释:不兼容的类型:Object 无法转换为 MyCustomObject
Posted
技术标签:
【中文标题】AIDL 中的 Parcelize 注释:不兼容的类型:Object 无法转换为 MyCustomObject【英文标题】:Parcelize annotation in AIDL: Incompatible types: Object cannot be converted to MyCustomObject 【发布时间】:2018-11-18 08:54:54 【问题描述】:我正在将我的模型类重写为 Kotlin
,它必须是 Parcelable
并在 AIDL
中使用:
@Parcelize
data class MyCustomObject(val value1: String, val value2: String) : Parcelable
在编译期间它会崩溃并出现错误:
错误:不兼容的类型:对象无法转换为 MyCustomObject
并在生成的代码中指向这一行:
if ((0!=_reply.readInt()))
_result = com.mypackagename.MyCustomObject.CREATOR.createFromParcel(_reply);
我将此注释用于其他目的,没关系,但到目前为止我发现在 AIDL 中不匹配。
有什么想法吗?
编辑:5 天后,我创建了 a ticket for this issue,没有任何评论。
【问题讨论】:
它是否适用于 java? 您还有 MyCustomObject.aidl(描述您的数据类的那个吗?) @IvanMilisavljevic,是的,确实如此。我也有那个 object.aidl。 对不起,我还在使用 java,我最好的猜测是 parcelable 生成器和 Kotlin 数据类有问题。您是否尝试清理和重建项目的一个愚蠢建议? @IvanMilisavljevic,是的,以这种方式尝试过。问题在于注释本身。在 kotlin 中可打包的样板也可以正常工作。 【参考方案1】:这是 Kotlin 中的一个错误,所以我将此问题重定向到 JetBrains。 你可以在这里追踪它:KT-25807。
发生这种情况,因为createFromParcel()
不返回类T
,而是Object
。
UPD
Parcelize 注释现在可由 Google 维护,该问题已在 kotlin 版本 1.5 中得到修复。+ https://issuetracker.google.com/issues/110131003
【讨论】:
AIDL 中使用 parcelized 的辅助工具有什么解决方案吗?有同样的问题 Parcelable 的样板实现。即使优先级设置为“高”,这个错误到目前为止还没有解决...以上是关于AIDL 中的 Parcelize 注释:不兼容的类型:Object 无法转换为 MyCustomObject的主要内容,如果未能解决你的问题,请参考以下文章