kotlin数据类与密封类(代码片段)

endian11 endian11     2022-12-09     140

关键词:

/**
 * 主构造函数至少包含一个参数
 * 所有的主构造函数的参数必须标识为val 或者var
 * 数据类不可以声明为abstract open、sealed或者inner
 * 数据类不能继承其他类,但是可以实现接口
 */

//关键字为data
data class User(val name:String,val age:Int)

//    fun copy(name: String=this.name,age: Int=this.age)=User(name,age)


/****
 *
 * 密封类
 *  受限的类继承结构:当一个值为有限的几种类型,
 *  而不能有任何其他类型时,在某种意义上,他们是枚举类的扩展
 *  枚举类型的值集合也是受限的,但每个枚举常量只存在一个实例
 *  而密封类的一个子类可以有可包含状态的多个实例
 *  sealed
 *  可以有子类,但子类必须内嵌在密封类中
 *密封类
 * 1.密封类用sealed关键词表示
 * 2.密封类的子类只能定义在密封类的内部或同一个文件中,因为其构造方法为私有的
 * 3.密封类相比于普通的open类,可以不被此文件外被继承,有效保护代码
 * 4.与枚举的区别:密封类适用于子类可数的情况,枚举适用于实例可数的情况


 *  sealed不能修饰interface、abstract class
 *
 *
        ***/


sealed class PlayerCmd
    val playerName :String = "player"

    class Player(val url:String,val position:Long = 0):PlayerCmd()
        fun showUrl()
            println("$url ,$position")
        
    

    class Seek(val position: Long):PlayerCmd()//快进
    object Pause:PlayerCmd()

//(密封类的子类也可以定义在密封类的外部,但要在同一个文件中)
object Resume :PlayerCmd()
object Stop:PlayerCmd()
enum class PlayerState
    IDLE,PAUSE,PLAYING,STOP



fun main(args:Array<String>)
    val jack = User("jack",12)
    val oldjack = jack.copy(age=2)
    println(jack)
    println(oldjack)



    PlayerCmd.Player("苍茫的天涯").showUrl()
    println(Resume.playerName)
    println(Stop.playerName)

 

深入kotlin-数据类和密封类(代码片段)

Dataclass定义Kotlin中对java中的pojo类型进行了专门的支持和简化,叫做数据类(dataclass)。一个数据类的定义非常简单,仅有一个主构造方法即可:dataclassPerson(valname:String,varage:Int,varaddress:String)//使用dataclassvarpers 查看详情

kotlin初学者枚举类-密封类-数据类-继承(代码片段)

...介:CSDN博客专家、华为云享专家认证系列专栏:Kotlin初学者学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。目录一、枚举类1.1创建枚举类1.2获取枚举相关信息1.3枚举类添加属性1.4定义函数1... 查看详情

kotlin学习手记——单例内部类数据类枚举类密封类内联类(代码片段)

Kotlin单例:只需要类前面添加object关键字即可,object定义类等价于java的恶汉式的单例模式objectSingletonvarx:Int=2funy()init//object不能定义构造函数,但可以定义init块object不能定义构造函数,但可以定义init块使用ÿ... 查看详情

对比java学kotlin密封类(代码片段)

从JavaSE15开始,Java也支持密封类了。什么是密封类?在Kotlin中类修饰符除了open、abstract、data这些,还有一个sealed:sealedinterfaceError//注意,sealed在Kotlin1.5版本后才支持修饰interfacesealedclassIOError:Errorconstr 查看详情

对比java学kotlin密封类(代码片段)

从JavaSE15开始,Java也支持密封类了。什么是密封类?在Kotlin中类修饰符除了open、abstract、data这些,还有一个sealed:sealedinterfaceError//注意,sealed在Kotlin1.5版本后才支持修饰interfacesealedclassIOError:Errorconstr 查看详情

对比java学kotlin密封类(代码片段)

什么是密封类?在Kotlin中类修饰符除了open、abstract、data这些,还有一个sealed:sealedinterfaceError//注意,sealed在Kotlin1.5版本后才支持修饰interfacesealedclassIOError:Errorconstructor()/*...*///protectedbyd 查看详情

kotlin常用的kotlin类②(枚举类|枚举类定义函数|密封类)(代码片段)

...普通函数2、枚举类定义构造函数三、密封类一、枚举类Kotlin中使用枚举类定义常量,枚举类定义格式如下:枚举常量都是枚举类的实例对象;enumclass枚举类类型名 枚举常量1, 枚举常量2, ...代码示例:enumclassGenderMALE,FEMALEfunmain()println(Ge... 查看详情

kotlin常用的kotlin类②(枚举类|枚举类定义函数|密封类)(代码片段)

...普通函数2、枚举类定义构造函数三、密封类一、枚举类Kotlin中使用枚举类定义常量,枚举类定义格式如下:枚举常量都是枚举类的实例对象;enumclass枚举类类型名 枚举常量1, 枚举常量2, ...代码示例:enumclassGenderMALE,FEMALEfunmain()println(Ge... 查看详情

kotlin中嵌套类数据类枚举类和密封类的详解(代码片段)

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家👉点击跳转到教程一、嵌套类如果一个类只对另一个类有用,那么将其嵌入到该类中并使这两个类保持在一起... 查看详情

深入kotlin-数据类和密封类(代码片段)

Dataclass定义Kotlin中对java中的pojo类型进行了专门的支持和简化,叫做数据类(dataclass)。一个数据类的定义非常简单,仅有一个主构造方法即可:dataclassPerson(valname:String,varage:Int,varaddress:String)//使用dataclassvarpers... 查看详情

kotlin抽象类密封类接口(代码片段)

1.抽象类(1)概念?从多个具有相同特征的类中抽象出一个使用abstract修饰的类,以这个抽象类作为其子类模板,从而避免子类设计的随意性。抽象类的设计是一种模板模式的设计模式。(2)特点抽象类、抽象属性、抽象方法都... 查看详情

在kotlin中使用带有rxjava的密封类时,类型不匹配(代码片段)

我有以下代码sealedclassAddressUiStateobjectAddressLoading:AddressUiState()classAddressLoadedState(valaddressResponse:AddressBookResponse):AddressUiState()classAddressErrorState(valerror:Throwable):AddressUi 查看详情

kotlin学习——数据类,泛型,嵌套类与内部类,对象表达式和对象声明(代码片段)

一.数据类数据类和JAVA中的javabean类似,只作用于保存一些数据,所以如果创建,会默认生成一些函数,并且会被标记为data:equals()/hashCode()toString()componentN()copy()我们来看下标准的写法dataclassUser(valname:String,valage:Int)... 查看详情

从 Kotlin 中的密封类扩展数据类

】从Kotlin中的密封类扩展数据类【英文标题】:ExtendingdataclassfromasealedclassinKotlin【发布时间】:2017-11-0905:46:33【问题描述】:我有一组共享一些公共字段的数据类,所以理想情况下,我想在超类型中声明它们(本例中为Message)... 查看详情

kotlin内部类与嵌套类(代码片段)

kotlin内部类与嵌套类简单的说,kotlin嵌套类相当于java的静态内部类,kotlin内部类相当于java普通内部类。classOutClassvalocval="一个外部类变量值"//嵌套类,相当于Java的静态内部类classNestedClassfuntest1()="嵌套... 查看详情

kotlin内部类与嵌套类(代码片段)

kotlin内部类与嵌套类简单的说,kotlin嵌套类相当于java的静态内部类,kotlin内部类相当于java普通内部类。classOutClassvalocval="一个外部类变量值"//嵌套类,相当于Java的静态内部类classNestedClassfuntest1()="嵌套... 查看详情

kotlin类与继承(代码片段)

类kotlin中使用关键字class声明类类声明由类名,类头(指定其类型参数,主构造函数等),花括号包围的类体构成,类头和类体都是可选的。classStudent如果一个类没有类体,则可以省略花括号classEmpty主... 查看详情

kotlin基础(十四)枚举类(enum)数据类(data)和密封类(sealed)与java的写法差异

...参数列表,你可以在enum的内部去声明字段和方法。但在kotlin中,这有点不太一样:enumclassSize(valabbreviation:String)SMALL( 查看详情