gpt4 book ai didi

android - 我们真的需要避免在 Kotlin 中为 Fragments 和 Activity 使用默认值的构造函数吗?

转载 作者:搜寻专家 更新时间:2023-11-01 09:24:31 25 4
gpt4 key购买 nike

我非常喜欢 Kotlin 以及它如何让我们编写出更好的代码。最好的功能之一是接口(interface)实现委托(delegate),如下所示:

class A(val someObject:SomeInterface) : SomeInterface by someObject

someObject 必须是单例(对象),必须在关键字 by 之后使用构造函数创建(但是你不能引用它,或者也许有人知道如何这样做?)或必须在构造函数中提供。

在 Android 困惑和糟糕的世界中,由于配置更改,我们不鼓励在 fragment 和 Activity 中使用构造函数。但是这个怎么样:

class MyFragment(val someObject:SomeInterface = SomeObjectImpl()):Fragment,SomeInterface by someObject

我尝试更改配置和事件,我允许系统终止我的应用程序,但一切看起来都正常,我的对象正在用我的 fragment 一次又一次地创建。这是有效的,还是我遗漏了什么?祝大家 Kotlin 快乐!

最佳答案

这是有效的。不鼓励重载 fragment 构造函数的原因是 Android 可以重新创建它们,并且它将使用默认构造函数:MyFragment()

但是 Kotlin 在幕后实现默认参数值的方式是创建额外的构造函数。您可以反编译您的类并看到它现在包含两个构造函数,一个接收 someObject,另一个为空。

从 JVM 的角度来看,空的构造函数看起来像这样:

public A() {
this(new SomeObjectImpl());
}

调用它将使用已实现类的新实例填充您的 fragment 。

关于android - 我们真的需要避免在 Kotlin 中为 Fragments 和 Activity 使用默认值的构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51733825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com