繁体   English   中英

在 kotlin android 中使用 Companion 对象是一个好习惯吗?

[英]Use Companion object in kotlin android is a good practice?

我曾经使用Java在android中编程,但是几周前我开始学习kotlin,当我使用Java时我尝试使用面向对象的方法并使用较少可能的静态对象或实例,所以当我在互联网上看到一些材料时关于在 kotlin 中消费 Web 服务的一些实现,我看到如下内容:

/*call of method from activity*/
val message = WebServiceTask.getWebservice(getString(R.string.url_service))

/*Class to do the call to webservice*/
class WebServiceTask {
    companion object {
        fun getWebService(url: String): WebServiceResponse {
            val call =
                RetrofitInstance.getRetrofit(url).create(ApiService::class.java).getList()
                    .execute()
            val webServiceResponse = call.body() as WebServiceResponse
            return user
        }
    }
}
/*Class to get Retrofit instance*/
class RetrofitInstance {
    companion object{
        fun getRetrofit(url: String): Retrofit {
            return Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .build()
        }

    }
} 

就像你看到的我在两个类中使用伴生对象,根据我读过的伴生对象相当于 java 中的静态实例,所以我的问题是:这段代码是否遵循面向对象编程?,推荐这种方法吗?,如果答案是不,这是面向对象中这段代码的最佳实现

是的, companion object是 Kotlin 中 Java static成员的等价物。 适用于static所有内容也适用于companion object

companion object的使用取决于它如何与类对象的状态交互。

如果您正在使用一些完全是纯函数的方法或一些您需要提供对类本身之外的访问的最终值,那么在这种情况下,使用伴随对象是完全有意义的。

推荐用于上述条件,因为它不会干扰类对象的状态。

因此,对于给定的代码片段,它是companion object的有效使用。

观察companion object中的方法不会与未作为参数传递给它们的东西交互。 你看到的一切都是在方法中创建/初始化或使用的,只是它得到的结果。

注意:但是,如果你的companion object成员(值或函数)干扰了对象的状态,就会导致泄漏,从而导致你遇到以前从未遇到过的麻烦。

是的,它相当于静态。 不,不建议这样做,因为它会导致模拟测试的问题,例如。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM