在kotlin中实例化对象声明中的对象

时间:2018-05-07 16:21:22

标签: kotlin

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在什么时候出现?

2 个答案:

答案 0 :(得分:2)

调用val instance = MyClass.create()独立于 MyClass的实例,您只需将该类型用作该方法的限定符(它就像{{1} Java中的方法)。请注意,您也可以编写static,但是当从Kotlin调用时,该随播广告的名称是多余的。

答案 1 :(得分:2)

  

在最后一行中,要调用创建我们已经需要MyClass对象(不是吗?)。

不,最后一行调用.create()随播广告上的MyClass。伴随对象是一个单独的类的实例(它不是MyClass)并在首次使用该类之前进行初始化,因此您不需要MyClass的实例来调用{{ 1}}。

请注意,从语法上讲,在.create()类名称上调用.create(),而不是在MyClass构造函数调用或MyClass()变量等普通表达式上调用。