Mar*_*ler 35 java constructor visibility kotlin
在Java中,可以通过创建类来隐藏类的主构造函数private,然后通过public static该类中的方法访问它:
public final class Foo {
/* Public static method */
public static final Foo constructorA() {
// do stuff
return new Foo(someData);
}
private final Data someData;
/* Main constructor */
private Foo(final Data someData) {
Objects.requireNonNull(someData);
this.someData = someData;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如何在不将类分成public接口和private实现的情况下与Kotlin达成同样的目标?使构造函数private导致它无法从类外部访问,甚至不能从同一文件中访问.
小智 53
在使用私有构造函数时,您甚至可以执行更类似于"模拟"公共构造函数的使用的操作.
class Foo private constructor(val someData: Data) {
companion object {
operator fun invoke(): Foo {
// do stuff
return Foo(someData)
}
}
}
//usage
Foo() //even though it looks like constructor, it is a function call
Run Code Online (Sandbox Code Playgroud)
Mar*_*ler 14
这可以使用伴侣对象:
class Foo private constructor(val someData: Data) {
companion object {
fun constructorA(): Foo {
// do stuff
return Foo(someData)
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
可以到达伴随对象内部的方法,就像它们是周围类的成员一样(例如Foo.constructorA())
请参阅此处的 kotlin 文档:
https://kotlinlang.org/docs/reference/classes.html#constructors
https://kotlinlang.org/docs/reference/visibility-modifiers.html#constructors
class DontCreateMe private constructor () { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17060 次 |
| 最近记录: |