我是Kotlin的忠实粉丝,以及它如何使我们编写更好的代码。最好的功能之一是接口实现委托,如下所示:
class A(val someObject:SomeInterface) : SomeInterface by someObject
someObject
必须是单例(对象),必须在关键字by
之后使用构造函数创建(但是您不能引用它,或者有人知道如何做到这一点?)或必须在构造函数中提供。
在Android混乱不堪的世界中,由于配置更改,我们不建议在片段和活动中使用构造函数。但是呢:
class MyFragment(val someObject:SomeInterface = SomeObjectImpl()):Fragment,SomeInterface by someObject
我试图更改配置和事件,允许系统终止我的应用程序,但一切仍然正常,我的对象正在用片段一次又一次地创建。这是有效的,还是我遗漏了一些东西? 大家好,科特林!
答案 0 :(得分:2)
这是有效的。不鼓励您重载片段构造函数的原因是Android可以重新创建它们,并且它将使用默认的一个:MyFragment()
但是Kotlin在幕后实现默认参数值的方法是通过创建其他构造函数。您可以反编译您的类,现在看到它包含两个构造函数,一个构造函数接收someObject
,另一个构造函数为空。
从JVM的角度来看,空的构造函数将如下所示:
public A() {
this(new SomeObjectImpl());
}
调用它会在片段中填充已实现类的新实例。