首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin】常用 Kotlin ② ( 枚举 | 枚举定义函数 | 密封 )

文章目录 一、枚举 二、枚举定义函数 1、枚举定义普通函数 2、枚举定义构造函数 三、密封 一、枚举 ---- Kotlin 中使用 枚举 定义常量 , 枚举定义格式如下 : 枚举常量...枚举 常量名称 ; MALE true 枚举常量 Gender.MALE 是 Gender 一个 实例对象 ; 二、枚举定义函数 ---- 在枚举中 , 可以 定义函数 , 包括 普通函数...和 构造函数 ; 1、枚举定义普通函数 通过 枚举 类型常量 ( 实例对象 ) 可以 调用 枚举中定义方法 ; 为枚举定义普通函数 : 在枚举 Gender 中定义了 log 函数 ,...为枚举定义构造函数后 , 每个枚举常量都要传入对应构造函数参数 ; 为枚举定义构造函数 : enum class Gender(var id: Int) { MALE(0), FEMALE...---- 枚举类型 是一组 子类型 闭集 ; 密封 可以 定义 枚举类型 子类型闭集 , 一个密封可以有多个子类 , 继承密封子类 必须 与 密封在相同 Kotlin 代码文件中 ; 密封适用于这种情况

1K10

Kotlin】常用 Kotlin ① ( 嵌套 | 数据 | 数据 copy 函数 | 数据解构声明 operator fun component1 | 数据运算符重载 )

文章目录 一、嵌套 二、数据 三、数据 copy 函数 四、数据解构声明 1、Kotlin 普通解构声明 operator fun component1 2、数据解构声明 五、运算符重载函数...---- 数据类型定义 : Kotlin 数据类型 是 专门用于存储 数据 , 一般该类中不定义 成员方法 ; 数据信息 : 数据 中 自动提供了 toString 实现 , 可以将数据转为...字符串 ; 数据类型对比 : == 运算符 对比两个数数据对比是引用地址 , equals 和 hashCode 函数 可以对比具体数据值 ; 在 Kotlin 中 , 一般情况下 == 比较是内容...copy 函数 ---- Kotlin 编译器不仅为 数据 重写了 toString , equals , hashCode 函数 , 还 提供了 copy 函数 , 借助该函数可以 快速创建一个相同内容数据...; 特别注意 : 数据 copy 函数调用是主构造函数 , 如果数据有属性是在次构造函数中赋值 , 则该数据不会被 copy 函数复制 ; 在上个章节查看 数据 字节码 反编译后 Java

85220
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin Vocabulary | 数据

在使用数据时,编译器会为您自动生成 toString()、equals() 与 hashCode() 函数,并提供开箱即用 解构 与拷贝功能,从而帮您简化工作,使您可以专注于那些需要展示数据。...接下来本文将会带您了解数据其他好处、限制以及其实现内部原理。 用法概览 声明一个数据,需要使用 data 修饰符并在其构造函数中以 val 或 var 参数形式指定其属性。...您可以为数据构造函数提供默认参数,就像其他函数与构造函数一样;您也可以直接访问和修改属性,以及在中定义函数。...构造函数参数 数据是作为数据持有者被创建。为了强制执行这一角色,您必须至少传入一个参数到它主构造函数,而且参数必须是 **val 或 var 属性**。...总结 数据Kotlin 中最常用功能之一,原因也很简单 —— 它减少了您需要编写模板代码、提供了诸如解构和拷贝对象这样功能,从而让您可以专注于重要事: 您应用

52820

Kotlin中级(9)- - - Kotlin数据、密封、内部类.md

Int) 2.数据声明条件 主构造函数最少要有一个参数 数据主构造器所有参数必须标记为val或var 数据不能是抽象、open、封闭、内部类 数据不能继承自任何其他(但可以实现接口)...3.访问数据2种方法 和普通一样"对象名.数据名" 编译器从主构造函数中声明属性中导出成员方法componentN()函数群 data class Leaf(val size: String...componentN函数群会按声明顺序对应于所有属性 上面的代码我们可以看到结构出来变脸可以直接拿来用,比如数据体Leaf中size属性,componentN函数群会按照数据体Leaf中属性声明顺序...copy()函数。(Koltin要修改数据属性,则使用其独有的copy()函数。其作用就是:修改部分属性,但是保持其他不变) 密封 1....但是,我们知道Kotlin枚举枚举常量是受限,因为每一个枚举常量只能存在一个实例 但是其和枚举不同地方在于,密封一个子类可以有可包含状态多个实例。

1.1K20

Kotlin Vocabulary | 内联函数原理与应用

image.png 我们项目里常常会创建一些 Util ,用于分类整理那些会在许多地方用到小型函数 (也称实用函数),如果这类函数接收了另一个函数作为参数,则可能会造成一些额外对象分配,通过使用...inline 关键字,您可以避免这种情况并提升应用性能。...函数调用——工作原理 我们在应用中常常要用到 SharedPreferences,现在假设您为了减少每次向 SharedPreferences 中写入内容时产生模板代码,实现了以下实用函数: fun...内联函数——工作原理 为了提升我们应用性能,我们可以通过使用 inline 关键字,来减少函数对象创建: inline fun SharedPreferences.edit( commit:...举例来说,如果去查看 Kotlin 标准库中内联函数,您会发现它们大部分都只有 1 - 3 行。 ⚠️ 不要内联大型函数

64310

转向Kotlin——数据和封闭

数据和封闭Kotlin两种特殊,今天一起了解一下。 数据Kotlin一个语法糖。Kotlin编译器会自动为数据生成一些成员函数,以提高开发效率。...尽管前面写User实现了我们需求,但会不会也太麻烦了,每个都需要重写toString和equals等方法。为了提高开发效率,Kotlin加入了我们马上要介绍数据。...数据也和普通一样,也可以继承其他,有一些其他成员函数等。...在开发中,我们经常需要复制一个对象,然后修改它一部分属性,这就需要一个复制机制,Kotlin除了为数据自动生成toString方法和equals方法,还默认生成了一个copy方法,它作用就是复制数据实例...Kotlin编译器会自动为数据生成组件函数(以后会说到),隐藏,可以直接将数据成员解构: var js = Person("Js", 20) // 将js.name和js.age分别赋给name和age

91520

Kotlin实现在里面创建main函数

{ //我是静态块 /** 这里面定义静态变量跟静态方法,类似java:static **/ } 上面的方法就是kotlin定义静态变量跟静态方法方式,我们知道javamain函数是一个静态方法...: public static void main(String[] args){ } 那在kotlin里面我们换个思路,既然main是静态方法,那么把它放在kotlin companion...补充知识:Kotlin继承-子类有构造函数 //如果一个要被继承,可以用open关键字进行修饰 /** * Kotlin可以有一个主构造器,以及一个或多个构造器,主构造器是 头部一部分...println("学生姓名: ${s.name}") } 如果一个要被继承,可以用open关键字进行修饰 Kotlin可以有一个主构造器,以及一个或多个构造器,主构造器是 头部一部分,...位于名称之后 以上这篇Kotlin实现在里面创建main函数就是小编分享给大家全部内容了,希望能给大家一个参考。

1.7K00

KotlinKotlin 继承 一 ( 继承基本方式 | final 关键字 | 子类主构造函数 | 子类次构造函数 )

继承格式 : 使用 " : " 继承父 ; 如果该父有主构造函数 , 那么子类必须至少有一个主构造函数或次构造函数 , 子类构造函数下面会根据不同情况详细解析 ; //注意这里构造函数需要实际调用...class 子类 : 父 { //子类函数体 override fun 被重写方法名 ( 被重写方法参数 ){ //要执行函数内容 } } 1 ....父没有主构造函数 ---- 1 . 父没有主构造函数 : 准确说是 , 父主构造函数没有参数 , 省略了 constructor 关键字和空括号 () ; 2 ....子类有主构造函数 : 父必须在主构造函数中初始化 , 子类 constructor() 可以省略 ; " : " 后 Father() 相当于调用了父主构造函数 , 将子类主构造函数委托给父主构造函数执行...父构造函数与子类构造函数总结 ---- 子类构造函数最终委托 : 子类构造函数归根到底都要委托给父主构造函数 ; ① 子类主构造函数 : 假如子类有主构造函数 , 该主构造函数肯定要委托父主构造函数执行

1.1K10

Kotlin函数

/* 在函数内部,类型 T vararg 参数可见方式是作为 T 数组,即上例中 ts 变量具有类型 Array 。...这里等待后面具体来看什么时候非内联 在 Kotlin 中,我们可以只使用一个正常、非限定 return 来退出一个命名或匿名函数。...如果一个函数只有一个表达式,则可以直接写"=" fun double(x:Int):Int=x*2 局部函数 Kotlin 支持局部函数,即一个函数在另一个函数内部。...: ints.filter(fun(item) = item > 0) 匿名函数返回类型推断机制与正常函数一样: 对于具有表达式函数匿名函数将自动推断返回类型,而具有代码块函数返回类型必须显式指定...可以实现dsl风格代码全靠它 Kotlin 提供了使用指定 接收者对象 调用函数字面值功能。 可以调用该接收者对象上方法而无需任何额外限定符,可以任意调用接受者方法和属性。

2.3K40

Kotlin实战--消除静态工具:顶层函数和属性

1.引入 我们都知道, Java 作为 门面向对象语言,需要所有的代码都写作函数。大多数情况下,这种方式还能行得通。但事实上,几乎所有的大型项目,最终都有很多代码并不能归属到任何 个中。...结果就是,最终这些将不包含任何状态或者实例函数,而是仅仅作为一堆静态函数容器。在 JDK 中, 最适合例子应该就是 Collections了。...看看你自己代码,是不是也有一些本身就以Util作为后缀命名。 在kotlin中,根本就不需要去创建这些无意义, 相反,可以把这些函数接放到代码文件顶层,不用从属于任何。...2.顶层函数 见名知意,原来在Java中,处于顶层,包含属性和方法,在Kotlin中,函数站在了位置,我们可以直接把函数放在代码文件顶层,让它不从属于任何。...4.写在最后 顶层属性和方法可以让我们代码更加简洁,而且不需要引入多于。顶层函数Kotlin里面用法也很广泛,我们最常用let()方法就是顶层方法。后面会单独讲到Kotlin常用顶层方法。

1.9K31

Kotlin中级(6)- - - Kotlin继承.md

Kotlin继承 1.超(Any) 在Kotlin中,所有的都是继承自Any,这是一个没有父类型。...: this(context,attrs,0) } 2.3函数重载与重写 在Kotlin中关于函数重载与重写和Java中几乎是一样,但是这里还是举例说明一下 重写函数量点特殊用法 不管是...Java还是Kotlin,重写基类型里面的方法,则称为重写,或者是覆盖基类型方法 1.当基函数,没有用到open修饰符修饰时候,实现中出现函数函数名不能与基中没有用open修饰符修饰函数名相同...// 注意,则`final`修饰符在编辑器中是灰色,因为Kotlin中默认默认是final 那么当一个基去继承另外一个基时,第二个基不想去覆盖掉第一个基方法时,第二个基该方法使用...") } 2.3重写属性 -重写属性和重写方法大致是相同,但是属性不能被重载 重写属性即指:在基中声明属性,然后在其基实现中重写该属性,该属性必须以override关键字修饰,并且其属性具有和基中一样类型

57260

About Kotlin-Kotlin1About Kotlin(1)

About Kotlin(1) 因为是从Java角度来学习Kotlin,在Java中,作为第一等公民。故学习Kotlin,也先从其开始。...Kotlin 普通 class Kotlin中没有添加修饰符直接以class开头都是final。final意义在于JVM可能存在优化(常量和方法内联)和防止继承滥用。...:Foo(){ override val x:Int=... } 数据 所谓数据,就是JavaPojo,除了字段外,基本不会写其他方法。...//在Kotlin中,可以使用data关键字 data class User(val name:String,val age:Int) 自动生成函数 编译器会自动从主构造函数中根据所有声明属性提取以下函数...copy实现就如下 fun copy(name:String=this.name,age:Int=this.age)=User(name,age) 确保有意义 为了确保数据是一致并且有意义

1.2K30

kotlin数据重写setter getter正确方法

概述 在开发过程中,经常会创建一些数据里,其没有任何逻辑功能,仅仅来用来保存数据。在Kolin中,将这些统一称为数据,用关键字data标记。...函数对, toString() 函数, 输出格式为 “User(name=John, age=42)” , componentN() 函数群, 这些函数属性对应, 函数名中数字 1 到 N, 与属性声明顺序一致..., copy() 函数 如果在该数据或者基中重写了以上某个成员函数,将不会再自动推断,以重写为准。...前言 kotlin数据,由于其内部封装了getter和setter方法,极大地简化了我们编程代码,但同时其不能像java那样方便重写getter或者setter方法,也给大家造成了一定麻烦。...val createTimeShow:String get() = { ...do something } } 总结 以上就是这篇文章全部内容了,希望本文内容对大家学习或者工作具有一定参考学习价值

3.7K10

Kotlin拓展函数真身

kotlin也写了很长一段时间了,香是真的很香这个东西。但是很多东西也是不求甚解,都是直接开始用,但是为什么我也不关心。举个栗子,就拿拓展函数来说。...返本归元 先介绍个工具,Android Studio工具栏有个tools/Kotlin/Show Kotlin ByteCode。...然后在你kotlin上就可以直接看到kotlin生成字节码。 先抛问题在来分析。 java能不能调用到kotlin到拓展函数? 当然可以了。下面的代码块内就是18F.dp()java写法。...也就是说我们写拓展函数其实也就是个静态方法,只是把我们拓展当作一个静态参数传递给了静态方法内。 深入探索 上面介绍工具还是要用下,看看到底字节码上拓展函数是怎么样。...简单分析完字节码操作之后,得出来结论基本就是生成了一个dp静态函数,以当前拓展作为第一个入参。 总结 这个文章其实吧是最近一个前同事去面试时候被问到,我其实也有点蒙蔽。

40841
领券