在object expressions and declarations浏览kotlin文档时,我遇到了这个代码段
async handleCreation(event) {
this.setState({ loading: true });
await Axios.post('/createElement', data);
this.setState({ data: this.state.data.concat(data), loading: false });
}
在第3行中,class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}
val instance = MyClass.create()
函数实例化了一个对象create
在最后一行中,要调用MyClass()
我们已经需要MyClass对象(不是吗?)。
我的问题是:MyClass在什么时候出现?
答案 0 :(得分:2)
调用val instance = MyClass.create()
独立于 MyClass
的实例,您只需将该类型用作该方法的限定符(它就像{{1} Java中的方法)。请注意,您也可以编写static
,但是当从Kotlin调用时,该随播广告的名称是多余的。
答案 1 :(得分:2)
在最后一行中,要调用创建我们已经需要MyClass对象(不是吗?)。
不,最后一行调用.create()
的随播广告上的MyClass
。伴随对象是一个单独的类的实例(它不是MyClass
)并在首次使用该类之前进行初始化,因此您不需要MyClass
的实例来调用{{ 1}}。
请注意,从语法上讲,在.create()
类名称上调用.create()
,而不是在MyClass
构造函数调用或MyClass()
变量等普通表达式上调用。