java - 如何在 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'
解决方案
编辑:要使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'
推荐阅读
- ibm-watson - 对话+发现java代码正在工作
- javascript - Chart.js - 条形图的散点图等价物是什么?
- node.js - 可以使用 Kerberos SSO 为主机创建-react-app / WebpackDevServer 代理吗?
- scala - 在 spark 数据框中使用案例类的好处
- c# - Python 中 MQTT over TLS 验证错误(C# 和 Mqtt.fx 中没有错误)
- mysql - 如何获取 MySql 选择/加入查询中每个名称的最新值?
- ionic-framework - 单击日历字段时想要禁用离子应用程序中的键盘
- python - Pyside - 使用 args 时无法连接信号
- ios - iOS Siri 快捷方式:我可以隐藏 Siri 上的操作按钮吗?
- php - 空数组在 Laravel 刀片中不会显示为空