当前位置: 首页 > 知识库问答 >
问题:

如何在类变量之间传递变量,而不用在第一个类中创建第二个类?

洪季萌
2023-03-14

我有两个班级。首先是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对象不是一个好主意,因为它分配了多余的内存。使用数据库或共享首选项也不是一个好主意,因为这种调用会减慢工作程序的速度,并且这种技术是为解决其他问题而创建的。

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

共有2个答案

柯波娃
2023-03-14

如果使用类而不是对象,则可以在要初始化它的那一刻尝试在构造函数中传递此值

萧业
2023-03-14

是的,你是对的。将 MainActivity 对象放在 ServiceBuilder 中不是一个好主意。相反,您可以添加这样的私有字段和函数,以将其作为服务构建的一个步骤启动到ServiceBuilder。然后,您将能够在构建服务函数中使用它

private var stringField: String? = null

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

然后在您的活动中将其用作

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

另外,你可以在这里回顾一下Kotlin中关于构建器模式的不同时刻。

 类似资料:
  • 我得到了这个错误: “变量'a'已赋值,但其值永远不可用”

  • 问题内容: 我想将一个类变量传递给另一个类,并使其成为该类的类变量。在以下情况下我该怎么做? 问题答案: 很难理解您正在问的问题,但这是一个可能的答案: 使B类成为A的子类: 如果重新声明为,则会出现一种情况,其中存在一个可以称为或的属性。(或在任一或刚刚…甚至作为或地方,并有类型和分别。) 如果您无法在和(或,以及一些包含声明的第三类)之间创建直接或子类型关系,那么您很不走运。他们无法共享声明。

  • 问题内容: 用Java开发一个简单的井字游戏。 我有一个名为的课程。此类应包含有用的游戏方法。游戏发生在另一个班级。 中的方法是。该方法应该将所有9个按钮(井字游戏板)上的文本设置为空白,再次将它们设置为启用,然后将变量设置为1。 这是它的代码: 是游戏主类中的JButtons数组。 该方法以前在游戏的主要类中使用。但是现在它在不同的类中,它无法到达该类中的按钮并对其进行操作。 我在中创建了get

  • 问题内容: 我想将其他类的一些值传递给渲染器。渲染器计算出值之后,我在帮助器类中有了一个互斥锁,该互斥体应该告诉我渲染器已完成计算,因此我可以继续使用这些新值。我可以毫无问题地传递渲染器的值,但是我不知道如何找回它们。我目前使用一些静态变量,但是在渲染器更改它们之后,它们似乎丢失了。它们在我的其他课程中不可见。例: 一类 } 在我的渲染器中 : 我的助手班: hasCalculated在渲染器中肯

  • 我是一个非程序员,有非常少的代码接触,但我想修改一个现有的代码库。我大大简化了下面的代码。请让我知道,如果我可以提供任何进一步的信息或如果这是没有意义的所有!Vocab很难。:) ClassD:

  • 可能重复: Java中的动态变量名: 假设我有一个字符串,如下所示。 现在,我想创建一个字符串,但是字符串的变量将被称为“Hello”。为了使字符串名为“Hello”,我必须访问string以获取名称“Hello”,这样我就可以将其用作变量名。下面是我想看的。 感谢您的努力,请尝试向我解释,因为我是Java初学者D