【问题标题】:Nested class in inner class内部类中的嵌套类
【发布时间】:2018-08-09 02:47:41
【问题描述】:

有没有办法在内部类中定义嵌套类?我认为嵌套类只是一个命名空间的东西,没有运行时后果,所以我不明白为什么下面不应该类型检查:

class Outer {
    inner class Inner {
        class Nested {
    }
}

这给了我class Nested 行上的“此处不允许类”错误。

当然,我可以将Nested 的定义移到Inner 旁边,一切都会正常;但在我的实际用例中,Nested 只与Inner 的实现相关,所以我想保留它。

【问题讨论】:

  • 在 Java 中,不允许内部类声明静态成员。 Kotlin 使用相同的原理。如果不是这样,那么与 Java 的互操作性就会变得更加混乱,只会使边缘问题受益。

标签: kotlin inner-classes


【解决方案1】:

那么这会奏效吗?现在嵌套可以访问内部和外部。对于各种“闭包”相关问题,不允许省略嵌套内部。

class Outer {
    inner class Inner {
        inner class Nested {
    }
}

数据类

data class Outer2(var foo: Int) {
    data class Inner(var foo: Int) {
        data class Nested(var foo: Int) {

        }
    }
}

【讨论】:

  • 如果我想让Nested 成为一个数据类怎么办?
  • 不能同时使用inner和data。
  • 对不起,我的意思是如果只有Nested 应该是一个数据类呢?在那种情况下,它不能变成Inner的内部类,因为数据类不能是内部类。
  • 不幸的是,数据类是特殊的,不能保存对父级的引用。
  • 是的,如果它是嵌套的,而不是内部的,这不会是一个问题。这就是我最初的问题。
猜你喜欢
  • 2014-12-04
  • 1970-01-01
  • 2015-10-21
  • 2014-02-11
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 2010-09-09
相关资源
最近更新 更多