Android Studio 中 <<intent.putExtra("string", it.getString("string") >> 上的 Kotlin 构建错误

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)

错误截图

Vic*_*tis 5

它认为返回的值为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.1.3(2017 年 6 月 23 日发布):kotlin 构建错误。
  • 1.1.2(2017 年 4 月 25 日发布):kotlin 构建错误。
  • 1.0.7(2017年3月15日发布):编译!没有错误!

然后,如果你使用1.0.7版本,就可以了!- 在 Android studio 中很难设置这个版本。或者您可以使用其他选项来强制编译器避免/修复此问题,例如:

  • '!!'it!!.getString("fragment")
  • 投射到Stringit.getString("fragment") as String
  • ?: "": it.getString("片段") ?: ""
  • ETC...