You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin技术问询:如何在String Template中使用属性值?

在Kotlin字符串模板中使用属性值的正确姿势

嘿,刚入门Kotlin碰到字符串模板的编译错误太正常了——我当初学的时候也踩过类似的坑。别担心,这就给你讲清楚怎么正确在字符串模板里用属性值:

基础用法:直接引用属性

如果只是想把单个属性值插入字符串,最简单的方式就是用$符号加上属性名。如果属性属于某个对象,直接链式调用就行:

data class Person(val name: String, val age: Int)

fun main() {
    val person = Person("Bob", 30)
    // 直接引用属性,两种写法都可行
    val simpleMsg = "Hi, I'm ${person.name}, and I'm $person.age years old."
    println(simpleMsg) // 输出:Hi, I'm Bob, and I'm 30 years old.
}

这里要注意:如果属性名后面紧跟着其他字符(比如字母、数字),必须用大括号{}把属性包裹起来,不然编译器会把后面的字符当成属性名的一部分,导致编译错误。比如你写"I'm $person.ageyo",编译器会去找person的ageyo属性,自然就报错了。

进阶用法:嵌入表达式

如果需要对属性做一些计算、调用方法,或者写更复杂的逻辑,同样用${}包裹整个表达式就行:

val nextYearAgeMsg = "Next year I'll be ${person.age + 1} years old."
val upperCaseNameMsg = "My name in uppercase is ${person.name.uppercase()}"

// 甚至可以写多行表达式
val isAdultMsg = "Am I an adult? ${
    if (person.age >= 18) "Yes" else "No"
}"

多行字符串里的模板

如果要写多行文本,用Kotlin的三重引号"""包裹字符串,模板语法同样适用,而且不需要转义双引号,格式更清爽:

val personProfile = """
    --- Person Profile ---
    Name: ${person.name}
    Age: ${person.age}
    Status: ${if (person.age >= 18) "Adult" else "Minor"}
""".trimIndent()
println(personProfile)

输出会自动去掉每行前面的缩进,看起来很整洁。

常见编译错误排查

如果你还是碰到编译错误,大概率是这几个原因:

  • 忘记用${}包裹复杂表达式,或者属性名和后面的字符连在一起
  • 引用了未初始化的属性(比如在init块里引用还没赋值的属性)
  • 拼写错了属性名,编译器找不到对应的属性

内容的提问来源于stack exchange,提问作者xcesco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:15:25