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