0 kotlin
我有使用Kotlin的代码:
class A{
var myVariable:String?=null
constructor(myVariable:String){
this.myVariable = myVariable
}
init {
println("Success !")
}
inner class B{
init {
println(myVariable)
}
}
}
fun main(args:Array<String>){
var b = A("test").B // this does not work
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它无法正常工作:
Error:(20, 23) Kotlin: Nested class 'B' accessed via instance reference
Error:(20, 23) Kotlin: Classifier 'B' does not have a companion object, and thus must be initialized here
Run Code Online (Sandbox Code Playgroud)
我该如何解决我的问题?
当您这样做时:
A("test").B
Run Code Online (Sandbox Code Playgroud)
您说的是“从A的实例中获取内容”-在这种情况下,它是一个类。但是,这不是您要查找的语法。您几乎可以获得任何东西,但是获得参考是一个单独的问题。如果要获取函数,语法与获取字段或调用函数不同。尽管这不是很重要,但还是要记住一点。
由于B是一个内部类,因此到目前为止,您完全正确,因此您首先需要A的实例。但是,您还需要B的实例。初始化B时,它仍然“连接”到父类,这就是为什么您可以毫无问题地访问外部变量的原因。但是,它仍然是可初始化的类-您需要对其进行初始化。
因此,您还需要初始化B。Kotlin的语法非常不错(Java中的语法有点可怕)-您需要添加的只是()
最后。
因此,您将得到以下结果:
val b = A("test").B()
// ...
Run Code Online (Sandbox Code Playgroud)
这是因为它是一个内部类。如果您有一个静态内部类(在Kotlin中,这是一个没有inner
关键字的类中的类),则初始化将是A.B()
-在这种情况下不会初始化A。
您还可以拆分初始化:
val a = A("test")
val b = a.B();
Run Code Online (Sandbox Code Playgroud)
有了变量后,它就和其他所有变量一样-唯一的区别是初始化。
归档时间: |
|
查看次数: |
59 次 |
最近记录: |