为什么Android + Kotlin中newStartIntent的伴随对象?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Android + Kotlin中newStartIntent的伴随对象?相关的知识,希望对你有一定的参考价值。
我在Kotlin中看到了很多示例,其中一个活动类具有一个伴随对象来封装创建起始意图的过程,如下所示。似乎特别受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...
时,都会得到部分不相关的结果的列表; - 同伴对象可以包含您不希望向公众公开的私有值,并使它们仅在您的类中可见,但仍使其保持静态。也许有一些参数是在此函数调用下计算的,并有意传递,并且您想隐藏这些计算或参数键;
- 这不是您的情况,但仍然很重要:使用伴随对象,您可以将所有构造函数设为私有,并控制传递给对象初始化的所有参数。这就是在Kotlin中创建Singleton的方式;
- 有意见就我个人而言,这使事情看起来很整洁。我通常只提取简单且使用相对广泛的函数。如日期转换函数或数学函数计算。
这是风格问题。只要选择一个并保持一致!
以上是关于为什么Android + Kotlin中newStartIntent的伴随对象?的主要内容,如果未能解决你的问题,请参考以下文章