我试图将接口的回调实现(在A类中定义)分配给在另一个B类中定义的变量。让我们说A类有接口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
}
}
为什么呢?哪些是差异和可能的解决方案?
答案 0 :(得分:1)
从代码片段缩小到如此小的片段并不明显,但你的问题是你在一个类的主体内写下了赋值,但不是在函数内部。
以下是有效声明和立即分配的示例:
class A {
var x: X? = X()
}
以下是无效赋值的示例,它将任意表达式放在类的主体中:
class A {
lateinit var x: X
x = X() // expression placed inside the class body, invalid syntax
someFunction() // extra example, calling functions here is invalid in the same way
}
相反,您可以将此初始化放在函数中:
class A {
lateinit var x: X
fun initializeX() {
x = X()
}
}
或在initializer block内(在这种情况下,您甚至不需要lateinit
):
class A {
var x: X
init {
x = X()
}
}
虽然我无法解释如何解决您的确切问题,因为我无法理解哪个类在哪个类中,我希望这些示例和解释有所帮助。
答案 1 :(得分:0)
我正在尝试使用以下代码分配实现A.OnSomethingHappens的匿名类的实例:...
这应该有效,但只能在方法中使用:
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
块。
另外,如果您可以直接将callback
初始化为init
或lateinit
内的/home/user/saltenv
,那么首先salt-ssh
就没有意义了。
答案 2 :(得分:0)
ggplot(df)+
aes(x=sentiment, y=..density..)+
geom_histogram(binwidth = 0.01, aes(fill = sentiment < .5)) +
geom_vline(aes(xintercept=mean(sentiment)),
color="blue", linetype="dashed", size=0.5)+
geom_density(alpha=.2,col="#FF6666") +
scale_fill_manual(values = c("green", "red"))
使用Kotlin lambdas。希望这会对你有所帮助。