如何在 classes 变量之间传输变量而不在 first class 中创建对象 second class?

How to transfer variables between classes variables without creating a object second class inside first class?

我有两个类。首先是 MainActivity.kt,我有一些字符串。第二个是这样的ServiceBuilder.kt

object ServiceBuilder {

    
    private const val URL = "https://someLink.com" // <------------- In here I should transfer the string in my MainActivity.kt class

    // Create Logger
    private val logger = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)

    // Create a Custom Interceptor to apply Headers application wide
    val headerInterceptor = object: Interceptor {

        override fun intercept(chain: Interceptor.Chain): Response {

            var request = chain.request()

            request = request.newBuilder()
                .addHeader("x-device-type", Build.DEVICE)
                .addHeader("Accept-Language", Locale.getDefault().language)
                .build()

            val response = chain.proceed(request)
            return response
        }
    }

    // Create OkHttp Client
    private val okHttp = OkHttpClient.Builder()
                                        .callTimeout(5, TimeUnit.SECONDS)
                                        .addInterceptor(headerInterceptor)
                                        .addInterceptor(logger)

    // Create Retrofit Builder
    private val builder = Retrofit.Builder().baseUrl(URL)
                                        .addConverterFactory(GsonConverterFactory.create())
                                        .client(okHttp.build())

    // Create Retrofit Instance
    private val retrofit = builder.build()

    fun <T> buildService(serviceType: Class<T>): T {
        return retrofit.create(serviceType)
    }
}

我需要正确地将字符串从 MainActivity 传输到此对象。我认为在 ServiceBuilder 中创建 MainActivity 对象不是个好主意,因为它分配了多余的内存。使用数据库或 SharedPreferences 也不是好主意,因为这种调用会减慢工作程序的速度,而创建这种技术是为了解决其他问题。

请告诉我解决这个问题的正确方法 P.S。我现在这个问题很简单,但是我现在不知道如何设计应用程序架构

是的,你是对的。将 MainActivity 对象放在 ServiceBuilder 中不是一个好主意。 相反,您可以添加这样的私有字段和函数以将其初始化为 ServiceBuilder 作为服务构建的一个步骤。然后你就可以在buildService函数

中使用它了
private var stringField: String? = null

fun fieldString(stringField: String): ServiceBuilder {
    this.stringField = stringField
    return this
}

然后从您的 activity 中使用它作为

    ServiceBuilder
        .fieldString("string to set")
        .buildService(...)

此外,您可以在此处查看有关 Kotlin 构建器模式的不同时刻

如果你使用 class 而不是对象,你可以尝试在你想要初始化它的时候在构造函数中传递这个值