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

转向Kotlin——数据类和封闭类

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

95620

Kotlin Vocabulary | 数据类

如果将其建模为一个类,并且只用来保存这些属性数据,那么您应当使用数据类。...您可以为数据类的构造函数提供默认参数,就像其他函数与构造函数一样;您也可以直接访问和修改属性,以及在类中定义函数。...、抽象类或者普通类,但是不能继承其他数据类。...您可以通过阅读我们之前的 Kotlin Vocabulary 文章 来了解更多有关解构的内容。 拷贝 数据类会生成一个用于创建新对象实例的 copy() 方法,它可以保持任意数量的原对象属性值。...总结 数据类是 Kotlin 中最常用的功能之一,原因也很简单 —— 它减少了您需要编写的模板代码、提供了诸如解构和拷贝对象这样的功能,从而让您可以专注于重要的事: 您的应用。

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

    转向Kotlin——类和接口

    类的声明 和Java没有什么两样,Kotlin中,类的声明也使用class关键字,如果只是声明一个空类,Kotlin和Java没有任何区别,不过定义类的其他成员,区别就很大了。...Kotlin会有一些不一样的地方,在Kotlin中,类允许定义一个主构造器,和若干个第二构造器。主构造器是类头的一部分,紧跟在类名的后面,参数是可选的。如下代码定义了一个类,并指定了一个主构造器。...Kotlin和Java一样,都是单继承的,也就是说,一个Kotlin类只能有一个父类。...Kotlin与Java类似,使用interface声明接口,一个类可以实现多个接口,实现的方法和类继承相同,而且,接口中的属性和方法都是open的。...小结 Kotlin中的类e和接口与Java中的本质上没有什么两样,只不过Kotlin为了体现差异,加入了一些语法糖,如接口允许函数带函数体,支持属性,不支持静态方法等。我们需要慢慢去熟悉它。

    93330

    一个实例学习Kotlin 开发 Android App 的全过程(内有代码)

    图2 显示天气情况 这款App使用前面章节介绍的UI技术、网络技术,并且使用Kotlin语言编写。其中有一些Library使用了Java编写,实际上,这款App是Kotlin和Java的结合体。...例如,地区列表是从服务端获取的JSON数据,因此,需要有相应的类来完成从网络上获取数据的工作,而且获取的是JSON格式的数据。因此,在使用这些数据之前,需要先将其转换为Kotlin类。...Kotlin代码(数据类) // 描述省信息的数据类 data class Province(var id:Int = 0, var provinceName:String, var proinceCode...Kotlin代码(解析JSON格式的数据) object Utility { // 解析和处理服务器返回的省级数据 fun handleProvinceResponse(response:...希望读者根据本书提供的Demo源代码以及本书讲解的知识独立完成这个项目,这样会让自己的Android和Kotlin开发功力有大幅度提升。

    5.3K50

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

    Int) 2.数据类声明条件 主构造函数最少要有一个参数 数据类的主构造器的所有参数必须标记为val或var 数据类不能是抽象类、open类、封闭类、内部类 数据类不能继承自任何其他类(但可以实现接口)...3.访问数据类的2种方法 和普通类一样"对象名.数据名" 编译器从主构造函数中声明的属性中导出的成员方法componentN()函数群 data class Leaf(val size: String...Leaf中的size属性,componentN函数群会按照数据体Leaf中属性声明的顺序,从component1到component4和size、color、shape、及vein一一对应。...但是,我们知道Kotlin的枚举类中的枚举常量是受限的,因为每一个枚举常量只能存在一个实例 但是其和枚举类不同的地方在于,密封类的一个子类可以有可包含状态的多个实例。...()”访问内部类,继承的子类能直接访问父类公开的成员属性及方法,而内部类值能通过this@外部类的方式访问外部类的属性和方法 从能否覆盖上看,继承的子类能覆盖父类用open标记的属性和方法,内部类不能覆盖外部类的属性和方法

    1.2K20

    Kotlin中级(7)- - - Kotlin类之抽象类、重载和重写.md

    1.抽象类 抽象类是不可直接被实例化的,因为它有一部分属性和方法没有被完整的赋值和体现。...而一个抽象类和普通类的区别在于抽象类除了可以有其自己的属性、构造函数、方法等组成部分,还包含了抽象函数以及抽象属性。...抽象类的规则 在Kotlin中的抽象类在顶层定义的时候只能使用public可见性修饰符修饰 抽象类中可以定义内部抽象类 只能继承一个抽象类 若要实现抽象类的实例化,需要依靠子类采用向上转型的方式处理...不过,抽象类建议不用open修饰符修饰,因为可以复写抽象类的夫类的函数。 重写和重载 重写和重载有什么区别?...重写是写在两个类里的,它们是继承的关系 重载是在一个类中的,相同的方法名、不同的参数 重载和重写都是针对方法的,且方法名相同

    87920

    转向Kotlin——枚举类和扩展

    枚举类 Kotlin中的枚举类和Java中的枚举类型非常相似,具有类的特性。一般将可枚举的同类型的一组值作为枚举类定义。...无论是Java还是Kotlin都提供了相应的API来获取枚举值的名字和索引。Kotlin提供了name和ordinal属性,分别用于获取枚举值名和索引。...扩展原生API 尽管JDK和Kotlin原生提供了很丰富的API,但这些API似乎仍然不够用,就需要为这些Library添加额外的API。...在类的外部对系统的类进行扩展,由于将扩展的部分都放到了自己的源代码中,因此这些源代码仍然可以运行在其他机器的JDK和Kotlin运行时上。...扩展属性 扩展属性和扩展方法类似,Kotlin属性在类中必须初始化,而初始化需要使用backing field,也就是那个field字段,可以将属性设置的值保存在field中,也可以从field获得属性值

    1.4K20

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

    文章目录 一、嵌套类 二、数据类 三、数据类 copy 函数 四、数据类解构声明 1、Kotlin 普通类解构声明 operator fun component1 2、数据类解构声明 五、运算符重载函数...---- 数据类型定义 : Kotlin 中的 数据类型 是 专门用于存储 数据的 类 , 一般该类中不定义 成员方法 ; 数据类信息 : 数据类 中 自动提供了 toString 实现 , 可以将数据转为...字符串 ; 数据类型对比 : == 运算符 对比两个数数据类对比的是引用地址 , equals 和 hashCode 函数 可以对比具体的数据值 ; 在 Kotlin 中 , 一般情况下 == 比较的是内容..., 将其数据打印出来 ; 同时还 重写 Student 数据类 中的 equals 和 hashCode 函数 ; // Student.java import kotlin.Metadata; import..., 使用集合一次性给多个变量赋值 ; Kotlin 普通类 和 数据类 都可以 支持 解构语法 , 为多个变量进行赋值 ; 数据类 自带 支持解构语法的特性 , 不需要使用 operator fun

    97320

    Kotlin | 4.类、对象和接口

    本章内容包括: 类和接口 非默认属性和构造方法 数据类 类委托 使用 object 关键字 1、定义类继承结构 /*--------------- 4.1.1 kotlin 中的接口...* Java 的类和方法默认是open的,而 Kotlin 中默认都是final的。 * 如果你想允许创建一个类的子类,需要使用 open 修饰符来标识这个类。...counter += word.length } } LengthCounter().addWord("jingbin") 3、编译器生成的方法: 数据类和类委托...代码清单4.21 数据类 Client // equals 和 hashCode 会将所有主构造方法里的值一起处理,不在主构造方法里的不会处理!...初始化语句块和从构造方法为初始化类实例提供了灵活性 使用 field 标识符在访问器方法体中引用属性的支持字段 数据类提供了编译器生成的 equals hashCode toString copy 和其他方法

    96210

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

    文章目录 一、枚举类 二、枚举类定义函数 1、枚举类定义普通函数 2、枚举类定义构造函数 三、密封类 一、枚举类 ---- Kotlin 中使用 枚举类 定义常量 , 枚举类定义格式如下 : 枚举常量...和 构造函数 ; 1、枚举类定义普通函数 通过 枚举类 的 类型常量 ( 实例对象 ) 可以 调用 枚举类中定义的方法 ; 为枚举类定义普通函数 : 在枚举类 Gender 中定义了 log 函数 ,...相当于为 Gender.MALE 和 Gender.FEMALE 实例对象定义了 log 函数 ; Gender.MALE 和 Gender.FEMALE 实例对象可以直接调用该函数 ; enum class...---- 枚举类型 是一组 子类型 闭集 ; 密封类 可以 定义 枚举类型的 子类型闭集 , 一个密封类可以有多个子类 , 继承密封类的子类 必须 与 密封类在相同的 Kotlin 代码文件中 ; 密封类适用于这种情况...{ // Male 和 Female 都是 密封类 Gender 的子类 object Male: Gender() object Female: Gender() } class

    1.1K10

    Kotlin 类声明和构造器(constructor)

    Java 和 Kotlin 构造器代码对比 Java 的构造器声明和方法声明没有太大区别,也支持重载,唯一的限制是:必须调用父类构造器(如果父类只有一个构造器而且是无参的,编译器会帮你自动加上,这是特例...但现代编程语言还是从构造器身上找到了优化空间,Scala–Kotlin 是其中之一。 我们不妨直接上代码对比 Kotlin 和 Java 的构造器声明的区别。...对应的,Kotlin 采用了如下对策来一一解决这些问题: 1. property 声明初始化时允许使用主构造器参数,变量声明和初始化代码都写在同一个地方,代码是高内聚的; 2....如果 Kotlin 类没有声明主构造器,全部都是从构造器,则退化为 Java 构造器风格,没有调用主构造器的约束。...因此 Kotlin 的初始化代码不仅可以使用主构造器的参数,还可以使用比自己先初始化的 property 和 init 块。

    1.3K20

    【Kotlin】Kotlin Sealed 密封类 ( 密封类声明 | 密封类子类定义 | 密封类特点 | 代码示例 )

    密封类概念 II . 密封类声明 III. 密封类注意事项 IV . 密封类 示例代码 I . 密封类概念 ---- 1 ....密封类与枚举类 : ① 相同点 ( 类型限制 ) : 从类型种类角度对比 , 类与枚举类类似 , 枚举类的值的集合是受限制的 , 不能随意扩展 ; ② 不同点 ( 对象个数限制 ) : 从每个类型对象个数对比...密封类注意事项 ---- 1 . 抽象类本质 : 密封类本质是抽象类 , 其类型不能被实例化 , 只能实例化其子类 ; 2 ....密封类子类 : ① 定义在密封类内部 ( 推荐 ) : 密封类的子类建议定义在密封类内部 , 可以兼容所有版本 ; ② 定义在密封类所在文件 : Kotlin 1.1 以后的版本 , 可以将密封类子类定义在密封类声明的同一个文件中...密封类孙子类 : 密封类子类也可以被继承 , 其孙子类没有继承限制 , 可以在其它类中继承定义 ; 5 . when 语句 : 在 when 语句中判定 , 必须有 else 其它情况进行兜底 , 但是判定密封类子类时

    1.4K10

    About Kotlin-Kotlin中的类1About Kotlin(1)

    About Kotlin(1) 因为是从Java的角度来学习Kotlin,在Java中,类作为第一等公民。故学习Kotlin,也先从其的类开始。...Kotlin中的类 普通的类 class Kotlin中没有添加修饰符直接以class开头的都是final类。final类的意义在于JVM可能存在的优化(常量和方法内联)和防止继承的滥用。...构造方法 Kotlin中一个类有一个primary的构造方法和可以多个的secondary的构造方法。...对应的Open类 对应上面的类,kotlin中的open类就是能够被继承的了。必须在类声明的时候使用open关键字。Kotlin社区有人对这个 “默认的final” 设计很不满。...所谓的数据类,就是Java的Pojo,除了字段外,基本不会写其他的方法。

    1.2K30

    Kotlin中级(6)- - - Kotlin类之的继承.md

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

    60960
    领券