我曾经使用 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/