【发布时间】:2019-01-26 22:13:58
【问题描述】:
这是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
...
}
错误变成警告
这个演员永远不会成功。
但显然,确实如此。
这是为什么呢?我该如何摆脱这个“错误”?
【问题讨论】:
标签: android json inheritance kotlin