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
相关产品推荐
相关产品推荐

