问题是,当我尝试在 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)
}
// ...
}
}
我尝试过重命名变量,当然,它有效,但我想知道是否有更好的解决方案。
对于这个问题你无能为力,但你也不需要它。如果您使用 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
}