当前位置: 首页 > news >正文

Kotlin中的类

类初始化顺序

constructor 里的参数列表是首先被执行的,紧接着是 init 块和属性初始化器,最后是次构造函数的函数体。

  1. 主构造函数参数列表
  2. firstProperty 初始化
  3. 第一个 init 块
  4. secondProperty 初始化
  5. 第二个 init 块
  6. 次构造函数函数体
class Example constructor(param: String) {val firstProperty = "First property: $param".also(::println)init {println("First initializer block that prints $param")}val secondProperty = "Second property: ${param.length}".also(::println)init {println("Second initializer block that prints ${param.length}")}constructor(param: String, secondParam: Int) : this(param) {println("Secondary constructor")}
}

静态类

2种静态类, 一种伴生类, 一种独立类
通过伴生类实现单例模式, 每个类伴生类只允许一个, 伴生类的名字可有可无

   class UserManager private constructor(var name: String) {init {print("test == $name")}constructor(name: String, age: Int) : this(name) {}constructor(name: String, age: Int, moreInfo: String) : this(name) {}override fun toString(): String {return name}companion object {val instance = UserManager("defaultName");fun getInstance(): UserManager {return instance}}}

通过独立类实现工具类

    object LogUtil {private val TAG = LogUtil.javaClass.simpleName.toString()fun log(ss: String): Unit {Log.e(TAG, ss)}}

数据类

  • data class 必须至少有一个参数。
  • 所有的主构造函数参数需要被标记为 val 或 var。
  • 数据类不能是抽象的、开放的(open)、密封的(sealed) 或者内部的(inner)
    可以使用网站生成数据类

https://transform.tools/json-to-kotlin
以下是两种生成的例子, Kotlin对下划线命名有警告, 所以自己不会生成下划线的名字, 使用注解的时候需要第三方库
implementation ‘com.fasterxml.jackson.core:jackson-annotations:2.11.2’

    data class Root(val userId: Long,val id: Long,val title: String,val completed: Boolean,)data class Root2(@JsonProperty("device_brand")val deviceBrand: String,@JsonProperty("device_id")val deviceId: String,@JsonProperty("device_number")val deviceNumber: String,val googleAdId: String,@JsonProperty("main_package_id")val mainPackageId: Long,val os: String,val page: Long,val query: String,val refresh: Boolean,)

Kotlin中所有类的类型

在 Kotlin 中,有以下几种主要的类类型:

  1. 普通类(Regular Class):这是最常见的类类型。可以用 class 关键字来声明这样的类。这种类可以包含构造函数、属性、方法等。例如:class MyClass(var name: String, val age: Int)
  2. 数据类(Data Class):这类用于存储多种数据类型的数据。它提供了一些内置的方法,如 equals()、hashCode()、toString() 和 copy()。声明一个数据类,需要在前面加上 data 关键字。例如:data class User(val name: String, val age: Int)
  3. 对象类(Object Class):这是 Kotlin 的一个单例类。一个对象类不能在构造函数中提供任何参数。可以通过 object 关键字创建。例如:object SampleObjectClass
  4. 枚举类(Enum Class):这是一种特殊的类,用于定义一组命名的常量值。例如:enum class DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
  5. 密封类(Sealed Class):密封类用于表示受限的类继承结构。一个密封类自身是抽象的,不能直接实例化并且可以有抽象成员。密封类的所有子类必须在该密封类自身定义的文件中声明。例如:sealed class Expr
  6. 内部类(Inner Class):Kotlin 中的内部类是默认不持有外部类引用的。如果需要访问外部类的成员,需要使用 inner 修饰符。例如:class Outer { inner class Inner }
  7. 嵌套类(Nested Class):在 Kotlin 中,一个类可以被嵌套在另一个类中,称为嵌套类。例如:class Outer { class Nested }
  8. 匿名内部类(Anonymous Inner Class):在 Kotlin 中,一般使用对象表达式创建匿名类的对象。例如在监听器的实例化中常用到。

以上就是 Kotlin 中的主要类类型。如果您还有其他关于 Kotlin 或其他 Android 相关的问题,欢迎随时提问。

相关文章:

  • 真的假不了,假的真不了
  • 动态规划——打家劫舍(C++)
  • 2024年【四川省安全员A证】试题及解析及四川省安全员A证模拟考试
  • SpringBoot3.3集成knif4j-swagger文档方式和使用案例
  • 前端初学java二(类、多态、接口、内部类、泛型)
  • 使用shell脚本进行clang-tidy静态代码分析
  • 【鸿蒙学习笔记】基础组件 Button
  • 可重入锁思想,设计MQ迁移方案
  • 高考文化课|高三这些高效学习方法你了解了吗?
  • adb热更新
  • SpringMVC的基本使用
  • Spring Data与多数据源配置
  • 《昇思25天学习打卡营第9天|onereal》
  • adb shell logcat -b all|grep如何可以grep两个子串?
  • Rust Eq 和 PartialEq
  • 30天自制操作系统-2
  • css系列之关于字体的事
  • go语言学习初探(一)
  • JavaScript的使用你知道几种?(上)
  • MQ框架的比较
  • python学习笔记-类对象的信息
  • session共享问题解决方案
  • Vue.js-Day01
  • vue.js框架原理浅析
  • 简单数学运算程序(不定期更新)
  • 嵌入式文件系统
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 异常机制详解
  • 鱼骨图 - 如何绘制?
  • 责任链模式的两种实现
  • "无招胜有招"nbsp;史上最全的互…
  • # 飞书APP集成平台-数字化落地
  • #define,static,const,三种常量的区别
  • (1)bark-ml
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三)docker:Dockerfile构建容器运行jar包
  • (生成器)yield与(迭代器)generator
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)JAVA中的堆栈
  • (转)memcache、redis缓存
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .Mobi域名介绍
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net反混淆脱壳工具de4dot的使用
  • .NET下的多线程编程—1-线程机制概述
  • 。。。。。
  • @我的前任是个极品 微博分析
  • [7] CUDA之常量内存与纹理内存
  • [Angular] 笔记 6:ngStyle
  • [Ariticle] 厚黑之道 一 小狐狸听故事