![](/img/trans.png)
[英]What is the use of companion object in kotlin and replacement in java
[英]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.