kotlin 属性的get和set方法
一、属性的继承
1、属性和函数类似也是可以继承
interface Parent { val addr: String // 这里是接口所以默认是open,如果是普通类中要被继承则需要显示写open } class Child: Parent { override val addr: String = "addr" // 这里使用override的方式 }
2、接口中的属性也可以有get和set,前提是不支持字段(支持字段需要在接口中存储状态)
interface User { var email: String var nickname: String get() = email.substringBefore('@') // 这里通过获取email的子字符串的方式 set(value: String) { email = value // 这里没有涉及到field // field = value // error: property in an interface cannot have a backing field } }
在接口中操作属性,不能涉及到field的操作
二、属性的get和set的作用
1、通过get和set方法增加额外的操作
class User(val name: String) { var addr: String? = null set(value: String?) { println("addr changed $field -> $value") // 这里增加打印的日志 field = value } get() { if (field == null) { addr = "unspec" // 这里给个默认值 } return field } }
如上的例子在get和set中增加了额外的操作
2、修改属性访问的权限
有时候在类中,希望属性的get是public但是set是private
class User { var count = 0 private set // 这里对set增加private的修饰,则只允许在类中赋值,但是get没有做操作则默认是public }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库