在Kotlin中创建私有内部类的公共实例
为什么Kotlin不允许创建与Java不同的私有内部类的公共实例?
在Java中工作:
public class Test { public A a = new A(); private class A { } }
在Kotlin不工作( A
班必须public
):
class Test { var a = A() // ^ // 'public' property exposes its private type 'A' private inner class A }
我会假设,因为没有真正的情况下,似乎是正确的事情。 访问属性a
任何代码都无法访问其类型。 你不能把它分配给一个变量。 在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 class
之inner class
。 我认为这在Java中是不可能的。