在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;
}
// ...
}
如何使用Kotlin实现相同的功能,而无需将类分解为公共接口和私有实现? 将构造函数设置为private
会导致它无法从类外部访问,甚至无法从同一文件中访问。
Companion
来调用伴生对象内的方法,例如Foo.Companion.constructorA()
。为了使其在Java中更自然,可以使用@JvmStatic
对该方法进行注释,然后该方法将表现得像静态方法(可以像调用Foo.constructorA()
一样调用)。 - Pandemonium