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 相关的问题,欢迎随时提问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/765442.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分子AI预测赛Task2笔记

下面所述比较官方的内容都来自官方文档 ‍‌⁠‌‍​​​‌​​⁠​​​​​​​​‍‬​​‍⁠‍‍​​‬​‌​​​‌‍‬​​​​​​‍‌Task2:赛题深入解析 - 飞书云文档 (feishu.cn) 赛题背景 强调了人工智能在科研领域&…

探囊取物之多形式注册页面(基于BootStrap4)

基于BootStrap4的注册页面,支持手机验证码注册、账号密码注册 低配置云服务器,首次加载速度较慢,请耐心等候;演练页面可点击查看源码 预览页面:http://www.daelui.com/#/tigerlair/saas/preview/ly4gax38ub9j 演练页…

晚上睡觉要不要关路由器?一语中的

前言 前几天小白去了一个朋友家,有朋友说:路由器不关机的话会影响睡眠吗? 这个影响睡眠嘛,确实是会的。毕竟一时冲浪一时爽,一直冲浪一直爽……刷剧刷抖音刷到根本停不下来,肯定影响睡眠。 所以晚上睡觉要…

MQTT协议详述

MQTT 概述 消息队列遥测传输(英语:Message Queuing Telemetry Transport,缩写:MQTT),是基于发布(Publish)/订阅(Subscribe)范式的消息协议,位于…

BurpSuite抓IOS设备HTTPS流量

一、简述: Burp 这个工具做过 web 安全的人都应该用过,是个非常强大的抓包工具。在 PC 的浏览器上直接配置代理就行了,本篇文章就来介绍一下如何用 Burp 抓 IOS 设备上的流量,很多文章都介绍过怎么抓包,但是很多坑都没…

Linux驱动开发实战宝典:设备模型、模块编程、I2C/SPI/USB外设精讲

摘要: 本文将带你走进 Linux 驱动开发的世界,从设备驱动模型、内核模块开发基础开始,逐步深入 I2C、SPI、USB 等常用外设的驱动编写,结合实际案例,助你掌握 Linux 驱动开发技能。 关键词: Linux 驱动,设备驱动模型,内核模块,I2C,SPI,USB 一、Linux 设备驱动模型 Li…

java反射和注解

反射 获取class对象的三种方法 ①:Class.forName("全类名"); ②:类名.class ③:对象.getclass(); 代码样例 package com.ithema;public class Main {public static void main(String[] args) throws ClassNotFoundException {//第…

【JavaEE精炼宝库】多线程进阶(2)synchronized原理、JUC类——深度理解多线程编程

一、synchronized 原理 1.1 基本特点: 结合上面的锁策略,我们就可以总结出,synchronized 具有以下特性(只考虑 JDK 1.8): 开始时是乐观锁,如果锁冲突频繁,就转换为悲观锁。 开始是轻量级锁实现&#xff…

QT+winodow 代码适配调试总结(二)

已经好多年了, linux环境下不同版本的QT程序开发和部署,突然需要适配window环境程序调试,一堆大坑,还真是一个艰巨的任务,可是kpi下的任务计划,开始吧!! 1、首先我们自定义的动态库…

【STM32HAL库学习】通信方式:USART、IIC、SPI

通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 通信接口区别 名称引脚双工时钟电平设备USARTTX、RX全双工异步单端点对点I2CSCL、SDA半双工同步单端多设备SPISCLK、MOSI、MISO、CS全双工同步单端多设备CANCAN_H、CAN_L半双工异步差分多设…

【数值计算库-超长笔记】Python-Mpmath库:高精度数值计算

原文链接:https://www.cnblogs.com/aksoam/p/18279394 更多精彩,关注博客园主页,不断学习!不断进步! 我的主页 csdn很少看私信,有事请b站私信 博客园主页-发文字笔记-常用 有限元鹰的主页 内容&#xf…

类与对象完结

1.匿名类 先看一个例子 class A { public:A(int a 0):_a(a){cout << "A(int a)" << endl;}~A(){cout << "~A()" << endl;}void Print(){cout << _a << endl;} private:int _a; };int main() {A aa1(10);aa1.Print(…

【Redis7】零基础篇

1 课程概述 2 Redis入门概述 2.1 是什么 Redis是基于内存的KV键值对内存数据库 Redis&#xff1a;Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff0c…

Halcon机器视觉定位--模板匹配

一 Halcon模板匹配归纳 二 形状匹配算子介绍 find_shape_model( Image ,//待搜索图像 ModelID, //模版图像 AngleStart, //起始角度 AngleExtent, //角度范围 MinScore, //最小匹配分数 NumMatches, //匹配数目 MaxOverlap, //重叠度 SubPixel, //搜索精度 Greediness ,//自信度…

【FFmpeg】av_read_frame函数

目录 1.av_read_frame1.2 从pkt buffer中读取帧&#xff08;avpriv_packet_list_get&#xff09;1.3 从流当中读取帧&#xff08;read_frame_internal&#xff09;1.3.1 读取帧&#xff08;ff_read_packet&#xff09;1.3.2 解析packet&#xff08;parse_packet&#xff09;1.3…

和小红书一起参会! 了解大模型与大数据融合的技术趋势

在过去的两年中&#xff0c;“大模型”无疑成为互联网行业的焦点话题&#xff0c;曾经炙手可热的大数据架构似乎淡出公众视野。然而&#xff0c;大数据领域并未停滞不前&#xff0c;反而快速演进&#xff0c;传统依赖众多开源组件的大数据平台正逐步过渡到以融合与简化为核心特…

C++ ariac2 Windows库编译

cd "F:\\aria2" gmp-6.1.2.tar.lz expat-2.2.0.tar.bz2 sqlite-autoconf-3160200.tar.gz zlib-1.2.11.tar.gz c-ares-1.12.0.tar.gz libssh2-1.8.0.tar.gz --enable-libaria2 --enable-static libgnutls-dev&#xff08;对于HTTPS&#xff0c;BitTorrent&#xff0…

Verilog开源项目——百兆以太网交换机(五)TCAM单元设计

Verilog开源项目——百兆以太网交换机&#xff08;五&#xff09;TCAM单元设计 &#x1f508;声明&#xff1a;未经作者允许&#xff0c;禁止转载 &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;全新原创以太网交换机项目&#xff0c;Blog内容将聚焦整体架…

LLM-Transformer:经典与前沿方法详解

LLM-Transformer&#xff1a;经典与前沿方法详解 前言 大规模语言模型&#xff08;LLM&#xff09;是当前自然语言处理&#xff08;NLP&#xff09;领域的核心技术&#xff0c;而Transformer架构作为LLM的基础&#xff0c;极大地推动了这一领域的发展。本文将详细介绍LLM-Tra…

DP:子序列问题

文章目录 什么是子序列子序列的特点举例说明常见问题 关于子序列问题的几个例题1.最长递增子序列2.摆动序列3.最长递增子序列的个数4.最长数对链5.最长定差子序列 总结 什么是子序列 在计算机科学和数学中&#xff0c;子序列&#xff08;Subsequence&#xff09;是指从一个序列…