Kotlin中如何获取同名函数或变量的引用?

问题描述 投票:0回答:1

问题是,当我尝试在 Kotlin 中获取对

testVar
变量的引用时,如果我有一个与该变量同名的函数,就会出现歧义。有解决办法吗?

class TestClassBuilder {

    lateinit var mainVar: String
    lateinit var testVar: String

    fun mainVar(mainVar: String) = apply {
        this.mainVar = mainVar
    }

    fun testVar(testVar: String) = apply {
        this.testVar = testVar
    }
    
    fun build() {
        if (!::testVar.isInitialized) {
            testVar = mainVar.substring(0, 5)
        }
        // ...
    }
}

我尝试过重命名变量,当然,它有效,但我想知道是否有更好的解决方案。

function kotlin variables reference ambiguity
1个回答
0
投票

对于这个问题你无能为力,但你也不需要它。如果您使用 Kotlin 属性,它会为您生成 setter。

首先,请检查属性如何运作 - link

然后使用普通属性:

class TestClassBuilder {
    lateinit var mainVar: String
    lateinit var testVar: String

    fun build() {
        if (!::testVar.isInitialized) {
            testVar = mainVar.substring(0, 5)
        }
    }
}

fun main() {
    val builder = TestClassBuilder()
    builder.mainVar = "some text"
}

以下是如何使用 Java 中的 setter:

public class C {
    public static void main(String[] args) {
        TestClassBuilder t = new TestClassBuilder();
        t.mainVar = "some text"; // variant 1
        t.setMainVar("another text"); // variant 2
    }
}

您还可以为 getter 和 setter 甚至自定义逻辑添加可见性修饰符:

var testVar: String = ""
    set(value) {
        field = if (value.startsWith("abc")) {
            value.removePrefix("abc")
        } else value
    }
© www.soinside.com 2019 - 2024. All rights reserved.