Kotlin中嵌套类无法访问的原因是什么?
Kotlin嵌套类访问报错的解决方法
你遇到的问题是Kotlin普通嵌套类的访问方式错误:
- Kotlin中,不带
inner关键字的嵌套类默认是静态嵌套类,它不属于外部类的实例,因此不能通过外部类的对象(比如tester)来访问。 - 正确的访问方式是直接通过外部类的类名调用嵌套类。
修正后的基础代码:
fun main(){ var tester = Test() println(tester.x) // 42 Test.Foo().bar() // 直接用外部类名访问嵌套类,编译通过 } class Test { var x:Int = 42 class Foo { fun bar() = println("foobar!") } }
如果需要让嵌套类访问外部类的成员变量或方法,需要把嵌套类声明为内部类,也就是加上inner关键字。此时内部类会持有外部类实例的引用,就能通过外部类对象访问了:
fun main(){ var tester = Test() println(tester.x) // 42 tester.Foo().bar() // 内部类可通过外部实例访问 } class Test { var x:Int = 42 inner class Foo { fun bar() { println("foobar!") println("外部类的x值:${this@Test.x}") // 访问外部类成员 } } }
内容的提问来源于stack exchange,提问作者yen
相关产品推荐
相关产品推荐

