在Kotlin中,属性是类的核心成员,用于封装对象的状态。与Java不同,Kotlin的属性将字段和访问器方法合二为一,大大简化了代码。

属性的基本声明使用var(可变)或val(只读)关键字:
var name: String = "Kotlin"
可变属性,可读可写val version: Double = 1.5
只读属性,只能读取不能修改
自定义访问器允许你控制属性的读写行为:
class Rectangle(val width: Int, val height: Int) {
val area: Int
get = width * height // 计算属性
var text: String =
set(value) {
field = value.trim // 使用field支持字段
属性的可见性修饰符包括public(默认)、private、protected和internal,用于控制属性的访问范围。
类方法与函数定义
Kotlin中的方法分为成员函数、扩展函数和高阶函数等多种类型,每种都有其特定的使用场景。
成员函数定义在类内部,可以访问类的所有属性和方法:
fun calculate: Double
无参数函数fun updateScore(points: Int): Boolean
带参数和返回值
扩展函数可以为现有类添加新功能而不需要继承:
fun String.addExclamation: String {
return this + “!
// 使用:”Hello”.addExclamation 返回 “Hello!
Kotlin还支持中缀函数、操作符重载和内联函数等高级特性,使代码更加简洁和表达力强。
构造函数与初始化
Kotlin的构造函数分为主构造函数和次构造函数,提供了灵活的对象创建方式。
主构造函数是类头的一部分,简洁明了:
class Person(
val name: String,
var age: Int = 0 // 默认参数
) {
init {
println(“Person $name 被创建”) // 初始化块
次构造函数使用constructor关键字定义,必须委托给主构造函数:
constructor(name: String) : this(name, 0)constructor : this("匿名用户")
初始化顺序非常重要:主构造函数参数 → 类属性声明 → init块 → 次构造函数体。
数据类与特殊类成员
Kotlin提供了数据类、对象声明等特殊类类型,极大地简化了常见编程模式。
数据类自动生成equals、hashCode、toString和copy方法:
data class User(
val id: Long,
val username: String,
val email: String
伴生对象相当于Java的静态成员,但更加灵活:
companion object { const val MAX_USERS = 100 }- 可以实现接口和继承类
对象表达式用于创建匿名类的实例:
val clickListener = object : OnClickListener {
override fun onClick {
println(“按钮被点击”)
属性委托与高级特性
属性委托是Kotlin的强大特性之一,允许将属性的getter和setter方法委托给其他对象。
内置委托包括:
| 委托类型 | 用途 | 示例 |
|---|---|---|
| lazy | 延迟初始化 | val data by lazy { loadData } |
| observable | 属性变化监听 | var count by Delegates.observable(0) { _, old, new -> } |
| vetoable | 有条件赋值 | var score by Delegates.vetoable(0) { _, old, new -> new >= 0 } |
自定义委托需要实现ReadOnlyProperty或ReadWriteProperty接口,为属性提供自定义的存取逻辑。
密封类与继承体系
密封类用于表示受限的类层次结构,在when表达式中特别有用。
密封类定义:
sealed class Result {
data class Success(val
T) : Result
data class Error(val message: String) : Result
object Loading : Result
使用密封类可以确保when表达式覆盖所有可能的情况,避免遗漏:
- 编译器会检查所有子类是否都被处理
- 添加新的子类时,编译器会提示需要更新相关when表达式
- 适用于状态机、API响应等场景
密封类与数据类、对象声明的结合使用,可以构建出既安全又表达力强的类型系统。
内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。
本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/134517.html