kotlin - 扩展属性中的 var 和 val 有什么区别?
问题描述
我创建了扩展属性,我遇到了这个问题
fun main(args: Array<String>) {
println(Animal("Mia",1,1.0))
}
class Animal(var name : String, var age : Int, var weight : Double)
var Animal.getXXX : String // compiler : Property must be initialized
get() = "$name, $age, $weight"
val Animal.getXXX : String // the compiler is running properly
get() = "$name, $age, $weight"
在上面的代码中。我为什么要使用val
而不是var
?
解决方案
错误消息可能有点令人困惑。对于使用它们的扩展字段,var
它们应该同时具有 getter 和 setter。使用的字段val
只需要有一个getter(并且不能有一个setter)。以下代码有效:
var Animal.getFoo : String
get() = "$name, $age, $weight"
set(value) { /* do something */ }
推荐阅读
- javascript - 如何使用 JEST 在方法中模拟方法?
- python - SLQAlchemy 无法创建关系列
- c# - 如何正确获取 MainPage?
- c++ - 为什么以下不等式在 C++ 中计算为真?
- python - 从重复轴重新索引
- java - 我正在尝试将此 Firebase 数据转换为 android 中的回收卡视图
- javascript - 在事件而不是页面加载之后启动 jQuery 计时器
- bash - 如何在bash中提取文本文件中的列
- javascript - 如何完成获取 LAST_INSERT_ID 并使用最后插入的 ID 运行第二个 app.post 的 app.post?
- android - 如何设置 3:4 纵横比 Flutter 相机预览