首页 > 解决方案 > 如何在 Kotlin 中仅在外部内部限制内部类的实例化?

问题描述

拥有内部和外部类我想仅通过外部类的范围来限制内部的实例化。我怎样才能在 Kotlin 中实现这一点?Java 以一种非常简单的方式提供了它。但似乎在 Kotlin 中我甚至无法从内部类访问私有字段。

Kotlin 有什么:

class Outer {
    val insideCreatedInner: Inner = Inner()
    inner class Inner
}

val insideCreatedInner = Outer().insideCreatedInner // Should be visible and accessible
val outsideCreatedInner = Outer().Inner() // I want to disallow this

Java如何解决这个问题:

class Outer {
    Inner insideCreatedInner = new Inner();
    class Inner {
        private Inner() {}
    }
}

Outer.Inner insideCreatedInner = new Outer().insideCreatedInner;
Outer.Inner outsideCreatedInner = new Outer().new Inner(); // 'Inner()' has private access in 'Outer.Inner'

标签: javakotlin

解决方案


编辑:要使val字段可见并同时隐藏Inner构造函数,使用可见的接口并使实现私有可能会很有用:

class Outer {
    val insideInner: Inner = InnerImpl()

    interface Inner {
        // ...
    }
    private inner class InnerImpl : Inner {
        // ...
    }
}


val outer = Outer()
val outsideInner = outer.InnerImpl() // Error! Cannot access '<init>': it is private in 'Inner'

推荐阅读