Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在kotlin中重新创建对象_Android_Kotlin - Fatal编程技术网

Android 在kotlin中重新创建对象

Android 在kotlin中重新创建对象,android,kotlin,Android,Kotlin,我有一个简单的问题:需要用其他参数重新创建一个对象。 有此目标: object NetworkClient { var BASE_URL = "http://google.ru" //we can take this from another class or Pref's const val API_BASE_URL = "$BASE_URL/api/" val httpClient = OkHttpClient.Builder() val client: C

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

object NetworkClient {
    var BASE_URL = "http://google.ru" //we can take this from another class or Pref's
    const val API_BASE_URL = "$BASE_URL/api/"

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

    init {    
        val builder = Retrofit.Builder()
                .baseUrl(API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())

        retrofit = builder.client(httpClient.build()).build()
        client = retrofit.create<PapaJobsClient>(Client::class.java)
    }
}
对象网络客户端{
var BASE_URL=”http://google.ru“//我们可以从另一个类或Pref的
const val API_BASE_URL=“$BASE_URL/API/”
val httpClient=OkHttpClient.Builder()
val客户端:客户端
var改造:改造
init{
val builder=reformation.builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
改装=builder.client(httpClient.build()).build()
client=reformation.create(client::class.java)
}
}

在极少数情况下,您需要动态地将BASE_URL更改为另一个字符串,并重新创建客户端等。我知道如何创建它,但我的解析非常困难-需要在我使用此类的所有位置进行返工,但我希望使用具体参数创建此对象。您是如何看待这个问题的?

您需要为此创建一个单独的类,因为单例(
object
在Kotlin中)不能有构造函数:

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

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

    init {    
       // ...
    }
}
使用
对象
使当前networkClient实例始终在手边:

object NetworkClientProvider {
    var networkClient = NetworkClient("http://google.ru")
}
用法,如果需要创建新的
NetworkClient

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

您需要为此创建一个单独的类,因为单例(
object
在Kotlin中)不能有构造函数:

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

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

    init {    
       // ...
    }
}
使用
对象
使当前networkClient实例始终在手边:

object NetworkClientProvider {
    var networkClient = NetworkClient("http://google.ru")
}
用法,如果需要创建新的
NetworkClient

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

你在这里误用了
对象
。如果您真的有一个类的单个实例,那么应该使用它,它是Kotlin用于应用单例模式的内置特性

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

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")

你在这里误用了
对象
。如果您真的有一个类的单个实例,那么应该使用它,它是Kotlin用于应用单例模式的内置特性

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

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")

他希望一次只拥有一个网络客户端实例,因此他没有像您所暗示的那样滥用对象。他希望一次只拥有一个网络客户端实例,因此他没有像您所暗示的那样滥用对象。