Kotlin,如何将回调实现分配给变量

标签 kotlin anonymous-inner-class

我试图将接口(interface)的回调实现(在类 A 中定义)分配给在另一个类 B 中定义的变量。假设类 A 具有接口(interface) OnSomethingHappens,它定义了 doSomething 方法。

在 B 类中,我定义了回调变量,如下所示:

private lateinit var callback:A.OnSomethingHappens

我需要创建类 A 的实例,并以这种方式将回调变量传递给构造函数:

myinstanceA = A(callback)

我正在尝试使用以下代码分配实现 A.OnSomethingHappens 的匿名类的实例:

callback = object : A.OnSomethingHappens {
   override fun doSomething(..){
      //here I put the implementation of this method
   }
 }

但是编译器对我的回调变量说“期望成员声明”,对对象说“期望名称”。 我做错了什么?

相反,我可以通过这种方式定义并同时分配回调变量:

private var callback = object : A.OnSomethingHappens {
      override fun doSomething(..){
        //here I put the implementation of this method
      }
    }
为什么?有哪些差异和可能的解决方案?

最佳答案

I'm trying to assign an instance of an anonymous class that implements A.OnSomethingHappens using this code: ...

这应该可以工作,但只能在方法内部:

class B {
    private lateinit var callback:A.OnSomethingHappens

    fun someMethod() {
        callback = object : A.OnSomethingHappens { ... }
    }
    ...
}

鉴于错误消息和 private var 编译(不在方法内部),您尝试直接在类的主体中设置它:

class B {
    private lateinit var callback:A.OnSomethingHappens

    callback = object : A.OnSomethingHappens { ... }
    ...
}

这是非法的:您可以编写的唯一代码是成员定义和 init block 。

此外,如果您可以直接在定义的位置或在 init 内部初始化 callback,那么 lateinit 就没有意义。

关于Kotlin,如何将回调实现分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49510381/

相关文章:

gradle - Kotlin 和 Gradle - 从 stdio 读取

spring - 如何在 Spek 测试中使用依赖注入(inject)

java - 我如何从匿名类访问我的主类?

android - 如何防止数字在我的 TextView 中转为科学记数法?

Spring Boot 和 Kafka 升级破坏了我的测试

android - java.lang.RuntimeException : Failed to invoke public android. arch.lifecycle.LiveData() 没有参数

java - 匿名内部类与静态字段

java - 匿名内部类需要覆盖它们现有的方法吗?

java - 向任意 java bean 添加属性

java - 将接口(interface)实现为匿名内部类时出错