2017-09-26 17 views
1

我知道Kotlin沒有靜態函數,所以我在OkHttpService.kt和my.kt中寫了兩個代碼。我不知道哪個更好,你能告訴我嗎?謝謝!伴侶對象和Kotlin中沒有課程的樂趣之間哪種方式更好?

OkHttpService.kt

class OkHttpService { 

    companion object { 
     fun httpGet(username: String, callback: Callback) { 
      val fetchRepoUrl = "https://api.github.com/users/$username/repos?page=1&per_page=20" 

      val client = OkHttpClient() 
      val request = Request.Builder() 
        .url(fetchRepoUrl) 
        .build() 

      client.newCall(request).enqueue(callback) 
     } 
    } 
} 

my.kt

fun OkHttpService_httpGet(username: String, callback: Callback) { 
      val fetchRepoUrl = "https://api.github.com/users/$username/repos?page=1&per_page=20" 

      val client = OkHttpClient() 
      val request = Request.Builder() 
        .url(fetchRepoUrl) 
        .build() 

      client.newCall(request).enqueue(callback) 
+0

個人喜好。你寧願有一個類似的命名空間(OkHttpService)還是隻有通常的命名空間?對於後者,你沒有這樣明確的選項:'OkHttpService.httpGet()'。 –

+0

謝謝!哪個比較好扔掉好玩的名字? – HelloCW

+0

對不起,我不明白。就個人而言,我喜歡類似於類的命名空間中的所有內容,因爲它使我可以選擇使用它或靜態導入它。但是在某些情況下頂層函數很方便(例如,當從kts/repl調用時)。 –

回答

4

對於作用域可以使用一般的objectcompanion

object OkHttpService{ 
    fun httpGet(username: String, callback: Callback) { 
     val fetchRepoUrl = "https://api.github.com/users/$username/repos?page=1&per_page=20" 

     val client = OkHttpClient() 
     val request = Request.Builder() 
       .url(fetchRepoUrl) 
       .build() 

     client.newCall(request).enqueue(callback) 
    } 
} 
+0

謝謝!你的意思是OkHttpService.kt中的代碼(伴侶對象)不是一個好方法嗎? – HelloCW

+0

我的意思是如果你不創建任何實例,就不應該有一個類。 Companion對象在Kotlin中的使用非常有限。 – voddan

+0

謝謝!但我被告知有更多的限制使用對象,你可以看看https://stackoverflow.com/questions/46273453/which-way-is-better-if-i-hope-to-use-a-語法就像靜態函數在kotli – HelloCW

相關問題