gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 18:25:21 28 4
gpt4 key购买 nike

我曾经使用 Java 在 android 中编程,但几周前我开始学习 kotlin,当我使用 Java 时我尝试使用面向对象的方法并使用较少可能的静态对象或实例,所以当我看到一些互联网上关于 kotlin 中使用 web 服务的一些实现的 Material 我看到了这样的东西:

/*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

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

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

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

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

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

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

关于android - 在 kotlin android 中使用 Companion 对象是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59331118/

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