【发布时间】:2019-12-13 23:47:23
【问题描述】:
我曾经使用 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 中的静态实例,所以我的问题是: 这段代码遵循面向对象编程吗?推荐这种方法吗?如果答案是否定的,那么在面向对象中哪个是这段代码的最佳实现
【问题讨论】:
-
如果你不使用伴生对象,也许应该研究像 kodein (github.com/Kodein-Framework/Kodein-DI) 或 dagger (github.com/google/dagger) 之类的依赖注入,通常它们不会对你产生太大影响,如果你确实使用它们,但最好不要
-
companion object是您在 Kotlin 中定义static变量/方法的方式。但是,您不应该在每次执行请求时都创建 Retrofit / ApiService 的新实例。