为什么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)
        // ...
    

    // ...

答案

实际上,您的方法没有什么问题,但是,我仍然想到了一些为什么我会选择顶层对象而不是顶层函数的原因:

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

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

以上是关于为什么Android + Kotlin中newStartIntent的伴随对象?的主要内容,如果未能解决你的问题,请参考以下文章

Android为什么要从Java改用Kotlin

Android为什么要从Java改用Kotlin

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

android 怎么逆向kotlin

android项目中不同的kotlin版本

为啥我会收到“服务未注册”异常,即使我没有在 Android - Java/Kotlin 中使用任何服务?