kotlin数据类与密封类

/**
 * 主构造函数至少包含一个参数
 * 所有的主构造函数的参数必须标识为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)
}

原文地址:https://www.cnblogs.com/endian11/p/10860904.html

时间: 2024-11-04 16:32:34

kotlin数据类与密封类的相关文章

Kotlin 数据类与密封类

数据类 Kotlin 可以创建一个只包含数据的类,关键字为 data: data class User(val name: String, val age: Int) 编译器会自动的从主构造函数中根据所有声明的属性提取以下函数: equals() / hashCode() toString() 格式如 "User(name=John, age=42)" componentN() functions 对应于属性,按声明顺序排列 copy() 函数 如果这些函数在类中已经被明确定义了,或者

Kotlin——最详细的数据类、密封类详解

在前面几个章节章节中,详细的讲解了Koltin中的接口类(Interface).枚举类(Enmu),还不甚了解的可以查看我的上一篇文章Kotlin--接口类.枚举类详解.当然,在Koltin中,除了接口类.枚举类之外,还有抽象类.内部类.数据类以及密封类.在今天的章节中,为大家详细讲解数据类和密封类.在下一章节中,再为大家奉上Kotlin中的抽象类以及内部类的知识.如果还对Kotlin中类的分类还不清楚的可以查看我的另一篇博文Koltin--类(class)详解. 目录 一.数据类 在Java中

Kotlin基础-数据类

/* * 数据类:专用于只"保存"数据的类,比如用户自动登录信息,聊天记录等 * 这里的保存并不是指保存到磁盘,而是指转换成文本格式,便于保存 * Kotlin数据类:data class 类名(属性列表) * * */ data class Article(var id:Int,var title:String,var content:String) fun main(args: Array<String>) { val artical=Article(1001,&quo

MySql数据类型和Java数据类型对应一览

类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N CHAR java.lang.String 1   BLOB L+N BLOB java.lang.byte[] -4   TEXT 65535 VARCHAR java.lang.String -1               INTEGER 4 INTEGER UNSIGNED java.la

数据类与生成数据库表所需组成

Entityframework属于ORM框架,作用为:将数据类与数据库表关联起来. 数据类与生成数据库表所需组成: 普通类(实体类):定义了属性字段+限制 数据上下文类:继承了DbContext,(各实体类的集合).作用:生成数据库和操作数据库. 配置文件中.连接数据库的字符串.注意name必须与数据上下文类的派生类名称相同. 控制器中,数据库上下文类的实例化,然后使用给对象方可生成数据库.

数据类型和typeof操作符

虽然学习js有一段时间了,但是对js的基础语法却是有些生疏.最近在看jquery源码,决定随带总结一些基础的语法知识.今天总结一下数据类型和typeof,这在写js的时候,是不得不知道的知识. 数据类型: js有5中基本的数据类型:undefined,Null,Boolean,Number,string;有一种复杂的数据类型:object,js不支持所有自定义的数据类型,所以所有变量的值都是以上类型. typeof:它的出现用来检测变量的数据类型,它可能的值有6种. undefined---如果

mysql的char数据类型和varchar数据类型的选择

mysql的char数据类型和varchar数据类型的选择 存储引擎对于选择char和varchar的影响: 对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列.这样可以使整个表静态化,从而使数据检索更快,用空间换时间 对于InnoDB存储引擎:使用可变长度的数据列,因为InnoDB数据表的存储格式不分固定长度和可变长度,因此使用char不一定比使用 varchar更好,但由于varchar是按照实际的长度存储,比较节省空间,所以对磁盘I/O和数据存储总量比较好 mysql并

Java数据类型和MySql数据类型对应表(转)

Java数据类型和MySql数据类型对应表 java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N CHAR java.lang.String 1   BLOB L+N BLOB java.lang.byte[] -4   TEXT 65535 VARCHAR java.lang.String -1        

Java数据类型和MySql数据类型对应表

Java数据类型和MySql数据类型对应表: 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte[] -4 TEXT 65535 VARCHAR java.lang.String -1 INTEGER 4 INTEGER UNSIGNED java.lang.Long 4 TI