在 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;
}
// ...
}
在不将类分为 public
接口(interface)和 private
实现的情况下,如何使用 Kotlin 达到相同的效果?将构造函数设为 private
会导致无法从类外部访问它,甚至无法从同一个文件访问。
最佳答案
您甚至可以在拥有私有(private)构造函数的同时做一些更类似于“模拟”公共(public)构造函数的使用。
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
https://stackoverflow.com/questions/46847734/