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")
他希望一次只拥有一个网络客户端实例,因此他没有像您所暗示的那样滥用对象。他希望一次只拥有一个网络客户端实例,因此他没有像您所暗示的那样滥用对象。