Kotlin类成员详解:属性方法与构造要点

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

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(默认)、privateprotectedinternal,用于控制属性的访问范围。

类方法与函数定义

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提供了数据类、对象声明等特殊类类型,极大地简化了常见编程模式。

数据类自动生成equalshashCodetoStringcopy方法:

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 }

自定义委托需要实现ReadOnlyPropertyReadWriteProperty接口,为属性提供自定义的存取逻辑。

密封类与继承体系

密封类用于表示受限的类层次结构,在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

(0)
上一篇 2025年11月27日 上午2:20
下一篇 2025年11月27日 上午2:21
联系我们
关注微信
关注微信
分享本页
返回顶部