Pat*_*ger 3 android kotlin android-studio
我无法弄清楚下面的代码有什么问题。在我看来 getString 必然返回一个字符串。事实上,它适用于上面的几行!这是一个错误吗?
fun loadExtraBundleIntoIntent(origIntent: Intent, resultIntent: Intent) {
origIntent.extras?.let {
if (it.getString("peerUid") != null) {
resultIntent.putExtra("fragment", "ChatFragment")
resultIntent.putExtra("peerUid", it.getString("peerUid"))
} else if (it.getString("fragment") != null) {
resultIntent.putExtra("fragment", it.getString("fragment"))
}
if (it.getString("action") != null)
resultIntent.putExtra("action", it.getString("action"))
}
}
Run Code Online (Sandbox Code Playgroud)
错误开启
resultIntent.putExtra("fragment", it.getString("fragment"))
Run Code Online (Sandbox Code Playgroud)
错误信息:
Error:(80, 30) Overload resolution ambiguity:
public open fun putExtra(p0: String!, p1: Bundle!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Parcelable!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Serializable!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Array<(out) Parcelable!>!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Array<(out) CharSequence!>!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Array<(out) String!>!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Boolean): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: BooleanArray!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Byte): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: ByteArray!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Char): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: CharArray!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: CharSequence!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Double): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: DoubleArray!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Float): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: FloatArray!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Int): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: IntArray!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Long): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: LongArray!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: Short): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: ShortArray!): Intent! defined in android.content.Intent
public open fun putExtra(p0: String!, p1: String!): Intent! defined in android.content.Intent
Run Code Online (Sandbox Code Playgroud)
它认为返回的值为it.getString ("fragment")
null,并且null值与所有这些putExtra
函数匹配。
例如:
resultIntent.putExtra("fragment", null)
捆绑、可解析、可序列化、可解析、CharSequence、字符串、BooleanArray、ByteArray、CharArray、CharSequence、DoubleArray、FloatArray、IntArray、LongArray、ShortArray、String
所有这些参数都是对象,并且可以将 null 设置为所有这些参数 - “重载解析歧义。所有这些函数都匹配”
不知何故,编译器认为“it”值可以为空,并且这种情况不应该发生,因为它是非空'else if'
类型。Bundle!
我相信这是一个编译器错误。
我已经使用以下 kotlin 版本进行了测试来编译您的代码:
然后,如果你使用1.0.7版本,就可以了!- 在 Android studio 中很难设置这个版本。或者您可以使用其他选项来强制编译器避免/修复此问题,例如:
'!!'
:it!!.getString("fragment")
String
:it.getString("fragment") as String
?: ""
: it.getString("片段") ?: "" 归档时间: |
|
查看次数: |
2496 次 |
最近记录: |