在kotlin中重新创建对象

时间:2018-01-09 14:05:58

标签: android kotlin

我有一个简单的问题:需要使用其他参数重新创建一个对象。 有这个对象:

n

在极少数情况下,您需要动态更改BASE_URL到另一个String并重新创建客户端等。我知道如何制作它,但我的分辨率如此之高 - 需要返工所有使用此类但我想创建的地方具体参数的这个对象。你怎么看待这个问题?

2 个答案:

答案 0 :(得分:3)

你需要为它做一个单独的类,因为单身人士(Kotlin中的object)不能有一个构造函数:

class NetworkClient(val baseUrl: String) {
    const val API_BASE_URL = "$baseUrl/api/"

    val httpClient = OkHttpClient.Builder()
    val client: Client
    var retrofit: Retrofit

    init {    
       // ...
    }
}

使用object随时掌握当前的networkClient实例:

object NetworkClientProvider {
    var networkClient = NetworkClient("http://google.ru")
}

用法,如果您需要创建新的NetworkClient

NetworkClientProvider.networkClient = NetworkClient("http://someOtherDomain.com")

答案 1 :(得分:2)

你在这里误导了object。如果你真的有一个单个类的实例,那么应该使用它,这是应用 Singleton 模式的Kotlin内置功能。<​​/ p>

通过使其成为常规类来修复它:

class NetworkClient(val baseurl: String) {
    const val API_BASE_URL = "$baseurl/api/"

    val httpClient = OkHttpClient.Builder()
    //...

}

然后可以创建具有不同baseurl s的对象,如下所示:

val russian = NetworkClient("http://google.ru")
val com = NetworkClient("http://google.com")
相关问题