私有构造在科特林
问题描述:
在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
接口和private
实现?构造函数private
导致它无法从课程外部访问,甚至不能从同一个文件访问。
答
这是可能使用的配套对象:
同伴对象内部class Foo private constructor(val someData: Data) {
companion object {
fun constructorA(): Foo {
// do stuff
return Foo(someData)
}
}
// ...
}
的方法可以达到一样,如果他们周围的类的成员(例如Foo.constructorA()
)
答
你甚至可以做一些事更类似于在具有私有构造函数的情况下“模拟”公共构造函数的使用。
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