【问题标题】:How to fix assignment are not expressions kotlin and only expression are allowed如何修复分配不是表达式 kotlin,只允许表达式
【发布时间】:2019-07-10 11:01:29
【问题描述】:

在下面,我正在尝试延迟初始化一个变量,如图所示。然而,在互联网上的一些例子之后,我理解了它的概念,但是我收到了下面发布的错误消息,因为 setupCommRequestService() 方法中所述的代码

错误信息:

assignment are not expressions kotlin and only expression are allowed

请查看下面发布的代码,请告诉我如何修复它

代码

lateinit var initCommRequestService : Single<CommunicationRequestService>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    setupCommRequestService()
        .map {
            it.getAllPhotos()
        }

}

fun setupCommRequestService() : Single<CommunicationRequestService> {
    return initCommRequestService = CommunicationRequestService.initRetrofit(this@MainActivity)!!
}
}

【问题讨论】:

    标签: kotlin lazy-initialization kotlin-lateinit


    【解决方案1】:

    为了扩展 Egor 的答案,这个问题与 lateinit 或其他东西没有真正的联系,只是在 Kotlin 中赋值不是表达式,所以 x = y 是一个语句而不是一个表达式。 鉴于return 需要一个表达式(或者根本没有,如果跳出返回Unit 的函数/方法),return x = y 是不允许的,因为从语法的角度来看这是错误的。

    请注意,在 Java 中这是允许的。

    正如其他人所说,修复包括拆分 2 条指令:

    val x = y
    return x
    

    【讨论】:

      【解决方案2】:
      fun setupCommRequestService(): Single<CommunicationRequestService> {
        initCommRequestService = CommunicationRequestService.initRetrofit(this@MainActivity)!!
        return initCommRequestService
      }
      

      【讨论】:

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