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

Lui*_*eda 4 android kotlin

我曾经使用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()
        }

    }
} 
Run Code Online (Sandbox Code Playgroud)

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

Har*_*shi 7

是的,companion objectKotlin 相当于staticJava 中的成员。适用于 的一切,也static适用于companion object

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

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

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

因此,对于给定的代码片段,它是companion object.

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

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