gpt4 book ai didi

android - 为什么 Android+Kotlin 中 newStartIntent 的伴随对象?

转载 作者:行者123 更新时间:2023-12-02 12:15:08 28 4
gpt4 key购买 nike

我在 Kotlin 中看到了很多示例,其中一个 Activity 类有一个伴随对象来封装启动 Intent 的创建,如下所示。它似乎特别受到 Java 的启发。

class HomeActivity : AppCompatActivity() {

companion object {

fun newStartIntent(context: Context): Intent {
val intent = Intent(context, HomeActivity::class.java)
return intent
}

}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
this.setContentView(R.layout.activity_home)
// ...
}

// ...
}

既然 Kotlin 有顶级函数,为什么不跳过伴随对象而只拥有一个顶级函数呢?
fun newHomeActivityStartIntent(context: Context): Intent {
val intent = Intent(context, HomeActivity::class.java)
return intent
}

class HomeActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
this.setContentView(R.layout.activity_home)
// ...
}

// ...
}

最佳答案

实际上,您的方法没有任何问题。我想到了为什么我会选择伴随对象而不是顶级函数的几个原因:

  • 每个人都可以看到顶级功能,因此每次您开始输入 new...您将获得部分不相关结果的列表;
  • 伴随对象可以保存您不希望向公众开放的私有(private)值,并使它们仅在您的类中可见,但仍使它们成为静态的。也许有一些参数是在这个函数调用下计算并有意传递的,你想隐藏这些计算或参数键;
  • 这不是您的情况,但仍然相关:使用伴随对象,您可以将所有构造函数设为私有(private)并控制传递给对象初始化的所有参数。这就是在 Kotlin 中创建 Singleton 的方式;
  • 对我个人而言,它使事情看起来很整洁。我通常只提取简单且相对广泛使用的函数。像日期转换函数或数学函数计算。

  • 这是风格问题。只需选择一个并保持一致!

    关于android - 为什么 Android+Kotlin 中 newStartIntent 的伴随对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62242345/

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