【问题标题】:Type mismatch: inferred type is Context? but Context was expected - Kotlin类型不匹配:推断类型是上下文?但上下文是预期的 - Kotlin
【发布时间】:2019-03-20 09:15:36
【问题描述】:

在将 kotlin 版本更新到 1.3.0 后,我遇到了上述问题

下面是代码,

     public class SequenceLayout(context: Context?, attrs: AttributeSet?, defStyleAttr: Int)
: FrameLayout(context, attrs, defStyleAttr), ViewTreeObserver.OnGlobalLayoutListener {

}

第一行我明白了。问题 。请帮我解决这个问题。

【问题讨论】:

  • 删除 ?从上下文

标签: android kotlin


【解决方案1】:

签名错误。上下文不能为空来创建视图,而AttributeSet 可以。改成这样

 public class SequenceLayout(context: Context, attrs: AttributeSet?, defStyleAttr: Int)

【讨论】:

    【解决方案2】:

    在 Kotlin 中,TypeType? 的类型不同。第二个是可空的。不能为第一个分配 null 值。

    当你期望Type? 时,你可以使用Type,但没有办法以相反的方式使用它。

    这样 Kotlin 可以确保 null 安全。您可以在这里阅读更多内容: https://kotlinlang.org/docs/reference/null-safety.html

    那么,如何解决你的问题呢?:

    • 使用!! 运算符 - 此运算符会将可空类型转换为不可空,但是,如果值为空,您将获得NullPointerException

    • 更改函数的签名以使用兼容类型。在你的情况下,这看起来是正确的方法。

    【讨论】:

      猜你喜欢
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多