android - AndroidStudio 拒绝承认继承层次结构
问题描述
这是与implementation 'org.json:json:20180813'
所以我有一个User
类,它允许将自己转换为 json 字符串以实现持久性:
data class User(override val name:String, override val creds:ICredentials) : IUser, isEncodable<IUser>{
override val isLoggedIn by lazy { creds is Credentials.Valid }
override fun encode():String{
val credsEncoding = creds.encode()
return JSONStringer().withObject { it
.key("type").value(this::class.java.name)
.key("name").value(name)
.key("creds").value(credsEncoding)
}.toString()
}
}
withObject
扩展函数在哪里:
fun JSONWriter.withObject(content:(JSONWriter)->JSONWriter) = content(`object`() as JSONWriter).endObject()
这似乎编译和工作得很好。
但是,AndroidStudio 将其标记为红色并声称
未解决的参考
由于接收器类型不匹配,以下候选均不适用
public fun JSONWriter.withObject(content:(JSONWriter)->JSONWriter):JSONWriter! defined in [...]`
如果我尝试“作弊”并将其写为
(JSONStringer() as JSONWriter).withObject { it
...
}
错误变成警告
这个演员永远不会成功。
但显然,确实如此。
这是为什么?我该如何摆脱这个“错误”?
解决方案
这是与实现 'org.json:json:20180813'
这不太可能运作良好。
这是为什么?
在过去的 11 年里,Androidorg.json
在 Android SDK 中有一个类的副本。这包括JSONStringer
. 您不能有两个具有相同完全限定名称的类,并且固件总是获胜。将不会使用您的冲突类副本,而是使用固件副本。在过去的 11 年里,固件的 API 并没有太大变化。
我该如何摆脱这个“错误”?
删除implementation 'org.json:json:20180813'
. 任何一个:
- 使用 Android SDK 的内置
org.json
类,或 - 使用 Android SDK
JsonReader
和JsonWriter
类,或 - 使用不同的 JSON 解析器(例如,Gson、Jackson、Moshi)
推荐阅读
- r - 使用新数据进行零膨胀 GAM 预测
- python - 如何在 Mac 上运行 python 文件?
- xcode - 在 SpriteKit 中使用 PhysicsBodies 时的意外行为
- mysql - 如何在 MySQL 中同时使用 WHERE BETWEEN 和 WHERE?
- php - c9 上的 Laravel Blade 模板仅选择性地扩展到某些页面
- php - PHP - 使用 XAMPP 时出现 $_SERVER('PHP_SELF') 错误
- c# - 检查一个数字是否包含数字 1 到 n 作为因子
- javascript - 使用 JavaScript 代理将值添加到参数
- ios - 通过带有 UDID 的 IPA 分发给客户?
- qt - 如何在 Qt 中创建自定义模块并像 Qt += mymodule 一样使用它?