跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kotlin属性
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Kotlin属性 = '''Kotlin属性'''是面向对象编程中的核心概念之一,用于表示类的状态或特征。在Kotlin中,属性不仅存储数据,还可以通过自定义的访问器(getter和setter)控制其读写行为。与Java不同,Kotlin属性更加简洁且功能强大,减少了样板代码的需求。 == 基本语法 == Kotlin属性的声明语法如下: <syntaxhighlight lang="kotlin"> class Person { var name: String = "John" // 可变属性 val age: Int = 30 // 只读属性 } </syntaxhighlight> * '''var''':声明可变属性(可读可写) * '''val''':声明只读属性(只能读取,不能修改) === 访问属性 === 属性可以通过对象实例直接访问: <syntaxhighlight lang="kotlin"> fun main() { val person = Person() println(person.name) // 输出: John person.name = "Alice" // 修改name属性 println(person.name) // 输出: Alice println(person.age) // 输出: 30 // person.age = 31 // 编译错误:val不能重新赋值 } </syntaxhighlight> == 自定义访问器 == Kotlin允许为属性定义自定义的getter和setter,从而在访问或修改属性时执行额外的逻辑。 === 自定义Getter === <syntaxhighlight lang="kotlin"> class Rectangle(val width: Int, val height: Int) { val area: Int get() = width * height // 计算属性 } </syntaxhighlight> 使用示例: <syntaxhighlight lang="kotlin"> fun main() { val rect = Rectangle(10, 20) println(rect.area) // 输出: 200 } </syntaxhighlight> === 自定义Setter === <syntaxhighlight lang="kotlin"> class User { var name: String = "" set(value) { if (value.isNotBlank()) { field = value // 使用field关键字引用幕后字段 } } } </syntaxhighlight> 使用示例: <syntaxhighlight lang="kotlin"> fun main() { val user = User() user.name = " " // 不会被设置 println(user.name) // 输出: "" user.name = "Alice" println(user.name) // 输出: Alice } </syntaxhighlight> == 幕后字段(Backing Field) == 在Kotlin中,每个属性默认都有一个'''幕后字段'''(用`field`关键字引用),它存储属性的实际值。当需要直接访问存储的值时(如在自定义访问器中),可以使用`field`。 <syntaxhighlight lang="kotlin"> class Counter { var count: Int = 0 set(value) { if (value >= 0) { field = value } } } </syntaxhighlight> == 延迟初始化属性 == 对于非空属性,如果不能在构造函数中初始化,可以使用`lateinit`修饰符标记为延迟初始化: <syntaxhighlight lang="kotlin"> class Service { lateinit var api: ApiClient fun initialize() { api = ApiClient.create() } } </syntaxhighlight> 注意: * 只能用于`var`属性 * 不能用于基本类型(如Int、Boolean等) * 访问未初始化的`lateinit`属性会抛出`UninitializedPropertyAccessException` == 属性委托 == Kotlin支持通过'''委托属性'''将属性的读写操作委托给另一个对象。标准库提供了`lazy`、`observable`等常用委托。 === lazy委托 === 延迟计算属性值(首次访问时计算): <syntaxhighlight lang="kotlin"> val heavyObject: HeavyObject by lazy { println("Initializing heavy object...") HeavyObject() // 仅在第一次访问时执行 } </syntaxhighlight> === observable委托 === 监听属性变化: <syntaxhighlight lang="kotlin"> import kotlin.properties.Delegates class User { var name: String by Delegates.observable("<no name>") { prop, old, new -> println("$old -> $new") } } </syntaxhighlight> 使用示例: <syntaxhighlight lang="kotlin"> fun main() { val user = User() user.name = "Alice" // 输出: <no name> -> Alice user.name = "Bob" // 输出: Alice -> Bob } </syntaxhighlight> == 实际应用案例 == === 案例1:数据验证 === <syntaxhighlight lang="kotlin"> class BankAccount { var balance: Double = 0.0 set(value) { require(value >= 0) { "Balance cannot be negative" } field = value } } </syntaxhighlight> === 案例2:UI状态管理 === <syntaxhighlight lang="kotlin"> class ViewModel { private var _loading = false val loading: Boolean get() = _loading fun startLoading() { _loading = true // 触发UI更新... } } </syntaxhighlight> == 属性与字段对比 == <mermaid> classDiagram class Property { +name: String +getter() +setter() } class Field { +value: Any } Property --> Field : 使用 </mermaid> == 数学表示 == 属性访问可以表示为函数: * Getter: <math>get(): T</math> * Setter: <math>set(value: T): Unit</math> 其中<math>T</math>是属性类型。 == 总结 == Kotlin属性提供了比Java字段更强大的功能: 1. 内置getter/setter简化语法 2. 支持计算属性和自定义访问逻辑 3. 通过委托实现复杂行为 4. 延迟初始化选项 这些特性使Kotlin属性成为构建健壮、可维护代码的重要工具。 [[Category:编程语言]] [[Category:Kotlin]] [[Category:Kotlin面向对象编程]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)