在Kotlin中创建私有内部类的公共实例

为什么Kotlin不允许创建与Java不同的私有内部类的公共实例?

在Java中工作:

public class Test { public A a = new A(); private class A { } } 

在Kotlin不工作( Aclass必须public ):

 class Test { var a = A() // ^ // 'public' property exposes its private type 'A' private inner class A } 

我会假设,因为没有真正的情况下,似乎是正确的事情。 访问属性a任何代码都无法访问其types。 你不能把它分配给一个variables。 在Test类之外的一个Test.A myVar声明会出错。 通过不允许,代码将被迫更加一致。 更好的问题是为什么Java允许它? 其他语言,如swift,也有相同的限制。

https://kotlinlang.org/docs/reference/visibility-modifiers.html#classes-and-interfaces

状态:

Java用户请注意:外部类在Kotlin中没有看到其内部类的私有成员。

对于你的用例,你可以使用嵌套类

private inner classes您只能访问外部课程的成员。

我认为科特林团队是这样实施的,所以可以将private inner classes成员的范围缩小到只能在inner classinner class 。 我认为这在Java中是不可能的。