【问题标题】:How to call outer class' super method from inner class in Kotlin?如何从 Kotlin 的内部类调用外部类的超级方法?
【发布时间】:2017-07-28 12:41:01
【问题描述】:

Java 的 OuterClass.super.method() 的 Kotlin 等价物是什么?

示例(在 Java 中):

class Outer {
    class Inner {
        void someMethod() {
            Outer.super.someOtherMethod();
        }
    }

    @Override
    public String someOtherMethod() {
        // This is not called...
    }
}

【问题讨论】:

  • 能发一个Java代码的使用例子吗?
  • 请注意,Kotlin 中的嵌套类默认为 static。对于内部类,您必须使用 inner 关键字。

标签: kotlin


【解决方案1】:

使用super@OuterClass.method() 语法:

open class C {
    open fun f() { println("C.f()") }
}

class D : C() {
    override fun f() { println("D.f()") }

    inner class X {
        fun g() {
            super@D.f() // <- here
        }
    }
}

这类似于Java OuterClass.thisexpressed in Kotlin as this@OuterClass

【讨论】:

    【解决方案2】:

    根据inner classes上的这个部分,你可以简单地调用外部方法:

    class Outer {
    
        inner class Inner {
            fun foo() { 
                bar() 
            }
        }
    
        private fun bar() {}
    }
    

    【讨论】:

      【解决方案3】:

      这在 Kotlin 中是等价的:

      internal class Outer {
          internal inner class Inner {
              fun myMethod() {
                  println(super@Outer.toString())
              }
          }
      
          override fun toString(): String {
              return "Blah"
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-04-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 2014-08-28
        • 1970-01-01
        • 2019-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多