当前位置: 首页 > wzjs >正文

网站建设在医院的作用百度app浏览器下载

网站建设在医院的作用,百度app浏览器下载,山东网站建设维护,东莞怎样做网站建设文章目录 数据类型枚举类型匿名类和伴生对象单例类伴生对象 数据类型 声明一个数据类非常简单: //在class前面添加data关键字表示为一个数据类 data class Student(var name: String, var age: Int)数据类声明后,编译器会根据主构造函数中声明的所有属性自动为其生成以下函数…

文章目录

  • 数据类型
  • 枚举类型
  • 匿名类和伴生对象
    • 单例类
    • 伴生对象

数据类型

声明一个数据类非常简单:

//在class前面添加data关键字表示为一个数据类
data class Student(var name: String, var age: Int)

数据类声明后,编译器会根据主构造函数中声明的所有属性自动为其生成以下函数:

  • .equals() / .hashCode()
  • .toString()
  • .componentN() 按声明顺序自动生成用于解构的函数
  • .copy()用于对对象进行拷贝

举个栗子:

data class Student(var name: String, var age: Int)fun main() {val student1 = Student("小明", 18)val student2 = Student("小明", 18)println(student1==student2)println(student1)val (name, age) = student1println("$name, $age")
}

在这里插入图片描述
为了确保生成代码的一致性和有效性,数据类必须满足以下要求:

  • 主构造函数中至少有一个参数
  • 主构造函数中的参数必须标记为valvar
  • 数据类不能是抽象的,可继承的,密封的或内部的

此外,数据类的成员属性生成遵循以下规则:

  • 如果数据类主体中,.equals() .hashCode().toString()等函数存在显式(手动)实现,或者在父类中有final实现,则不会自动生成这些函数
data class Student(var name: String, var age: Int) {override fun toString(): String = "我是自定义的toString"
}fun main() {val student = Student("小明", 18)println(student)
}

在这里插入图片描述
如果父类具有open operator fun componentN()函数并返回兼容类型,数据类会生成相应的函数,并覆盖父类的函数,如果由于关键字导致无法重写父类对应的函数会直接导致报错

在这里插入图片描述

open class Person {//此函数必须是open的,否则无法被数据类继承open operator fun component1() = "我想当太空人"
}//自动覆盖父类的component1函数
data class Student(var name: String, var age: Int): Person() fun main() {val (name, age) = Student("小明", 18)println("$name, $age")
}

在这里插入图片描述

  • 不允许为.componentN().copy()函数提供显式实现

在这里插入图片描述
注意,编译器只会根据主构造函数中定义的属性生成对应函数,如果我们不希望某些属性被添加到自动生成的函数中,我们需要手动将其移出主构造函数:

data class Student(var name: String) {var age: Int = 0 //age属性不会被处理
}fun main() {val student1 = Student("小明")val student2 = Student("小明")student1.age = 17student2.age = 18println(student1==student2)println(student1)
}

在这里插入图片描述
数据类自带一个拷贝对象的函数,使用.copy()函数复制对象

data class Student(var name: String, var age: Int)fun main() {val student = Student("小明", 18)val copyStudent = student.copy()println(student==copyStudent)println(student===copyStudent)
}

在这里插入图片描述
还允许修改一些属性,而其余保持不变

data class Student(var name: String, var age: Int)fun main() {val student = Student("小明", 18)val copyStudent = student.copy(age = 17)println(copyStudent)
}

在这里插入图片描述

枚举类型

如果我们想要存储和表示自定义的多种状态,可以使用枚举类型

//在类前面添加enum表示枚举类
enum class TrafficLight {RED, YELLOW, GREEN
}fun main() {val light: TrafficLight = TrafficLight.REDprintln(light)println(light.name) //name属性是String类型println(light.ordinal)println(TrafficLight.RED.ordinal)println(TrafficLight.YELLOW.ordinal)println(TrafficLight.GREEN.ordinal)
}

在这里插入图片描述

枚举也可以具有成员,但不能命名为name,因为name用来返回枚举名称了

enum class TrafficLight(var type: String) {//枚举在定义时必须填写参数,如果后面还要编写函数之类的其他内容,需在末尾添加;RED("红灯"), YELLOW("黄灯"), GREEN("绿灯");fun isGreen() = this == GREENfun test() = println("我是$type")
}fun main() {val light: TrafficLight = TrafficLight.REDprintln(light.type)println(light.isGreen())light.test()
}

在这里插入图片描述

枚举类型可以用于 when 表达式进行判断,因为它的状态是有限的

enum class TrafficLight(var type: String) {//枚举在定义时必须填写参数,如果后面还要编写函数之类的其他内容,需在末尾添加;RED("红灯"), YELLOW("黄灯"), GREEN("绿灯");
}fun main() {val light: TrafficLight = TrafficLight.REDval result: String = when (light) {TrafficLight.RED -> "禁止通行"TrafficLight.YELLOW -> "减速通行/准备停下"TrafficLight.GREEN -> "正常通行"}println(result)
}

在这里插入图片描述
在枚举类中也可以编写抽象函数,但需要枚举自行实现

enum class TrafficLight(var type: String) {RED("红灯") {override fun test() = println("我是红灯, 禁止通行")}, YELLOW("黄灯") {override fun test() = println("我是黄灯, 是让你减速, 不是踩油门冲过去")}, GREEN("绿灯") {override fun test() = println("我是绿灯, 速速离去")};abstract fun test()
}fun main() {val light: TrafficLight = TrafficLight.REDlight.test()
}

在这里插入图片描述

如果枚举实现了某个接口,既可以成员实现也可以统一实现

interface Message {fun test()
}enum class TrafficLight(var type: String): Message {RED("红灯") {override fun test() = println("我是红灯, 禁止通行")}, YELLOW("黄灯") {override fun test() = println("我是黄灯, 是让你减速, 不是踩油门冲过去")}, GREEN("绿灯") {override fun test() = println("我是绿灯, 速速离去")};
}
enum class TrafficLight(var type: String): Message {RED("红灯"), YELLOW("黄灯"), GREEN("绿灯");override fun test() = println("回家收衣服咯")
}

匿名类和伴生对象

fun main() {val obj = object { //使用object关键字声明一个匿名类并创建对象val name = "张三"override fun toString() = "我是匿名类, name: $name"}println(obj)
}

在这里插入图片描述
匿名类虽然没名字,也可以定义成员,不过不能定义任何构造函数

匿名类也可以作为某个类的子类定义,或是某个接口的实现

interface Person {fun chat()
}fun main() {val obj: Person = object: Person {override fun chat() = println("以心为鞘,以养利剑")}obj.chat()
}

在这里插入图片描述

open class Human(val name: String)fun main() {val obj: Human = object: Human("萧炎") {override fun toString() = "我是$name"}println(obj)
}

在这里插入图片描述

单例类

object关键字除了用于声明匿名类型,也可以用于声明单例类(整个程序中只能存在一个对象)

object Singleton {private val name = "超人强"override fun toString(): String = "我叫$name"
}fun main() {val singleton = Singleton //不能通过构造函数创建对象,通过类名直接得到此单例类的对象println(singleton)
}

在这里插入图片描述

object Singleton {fun test() = println("原神,启动!")
}fun main() {Singleton.test() //单例定义的函数使用类名直接就能调用
}

在这里插入图片描述

伴生对象

实际上就是将一个单例类写到某个类内部

class Student(val name: String, val age: Int) {//使用companion关键字在内部编写一个伴生对象,它同样是单例的companion object Tools {//伴生对象定义的函数可以直接通过外部类名调用fun create(name: String, age: Int) = Student(name, age)}
}fun main() {Student.create("小明", 18)Student("小红", 19) //使用构造方法
}

伴生对象在类加载的时候就自动创建好了


文章转载自:

http://kRlPoDB9.gkfwp.cn
http://PLWbkD58.gkfwp.cn
http://cGterD16.gkfwp.cn
http://RwZ7CPXg.gkfwp.cn
http://D8b3JbzL.gkfwp.cn
http://mnoJw6uN.gkfwp.cn
http://sSjMwWnz.gkfwp.cn
http://0uI9a3AG.gkfwp.cn
http://GgGqsk0P.gkfwp.cn
http://pCO47Uey.gkfwp.cn
http://rbfRc1VQ.gkfwp.cn
http://x9QRglOw.gkfwp.cn
http://TB11lHsx.gkfwp.cn
http://o1wMbNpF.gkfwp.cn
http://zrSqk7fp.gkfwp.cn
http://Jhlve00F.gkfwp.cn
http://UVPnjbQr.gkfwp.cn
http://SGA6f2J8.gkfwp.cn
http://K9NQ4yks.gkfwp.cn
http://SlkvgWFc.gkfwp.cn
http://TLwn3NId.gkfwp.cn
http://uGfrDBMx.gkfwp.cn
http://fqDuGyUF.gkfwp.cn
http://NylB6rpR.gkfwp.cn
http://rzFvsS15.gkfwp.cn
http://vpaOnk2y.gkfwp.cn
http://p9h2YNq5.gkfwp.cn
http://3SWdDMnH.gkfwp.cn
http://dNRwaNCi.gkfwp.cn
http://PvOyyc6c.gkfwp.cn
http://www.dtcms.com/wzjs/722822.html

相关文章:

  • 有服务器了怎么做网站营销型网站建设市场分析
  • wordpress个人网站后台登陆西安网站制作顶尖公司
  • 饰品网站模板网页游戏制作教程
  • 成都动力无限 网站 差网站建设官方商城
  • 绵阳网站建设怎么做贵州城乡住房和建设厅网站
  • 如何建立公司网站南通佛山附近做网站的公司
  • 网络营销的主要形式有建设网站兴安盟seo
  • 动漫做a视频网站win10优化
  • 河东区腾讯网站建设华为云云速建站
  • 网站员工风采深圳建筑设计师招聘信息
  • dw做的网站怎么放到服务器上个人网站代码编写
  • 成立门户网站建设工作小组给教育类做网站
  • 大连 网站wordpress怎么引用新浪ajax
  • 个人建立网站后怎么盈利做家教网站
  • 平顶山做网站的公司搭建一个网站需要哪些技术
  • 建设网站费用分析国外媒体报道
  • 3d 代做网站个人网站二级域名做淘宝客
  • 杭州余杭网站建设南宁网页设计培训学校
  • 青岛专业网站建设定制免费图片制作生成器
  • 网站建设应解决的问题买购网
  • 太原推广型网站建设wordpress转换为html
  • 利用表单大师做网站深圳发布稳增长措施
  • 做水晶接单在哪个网站接简单班级网站模板
  • 手机网站免费模板下载郑州做网站哪家专业
  • 唐山网站制作服务公司wordpress更改站点地址
  • 教育网站建设公司网站500兆空间多少钱
  • 基层档案网站建设建设网站 (公司)
  • psd资源下载网站模板wordpress 意见反馈
  • 佛山制作网站公司吗做视频网站要多大的服务器
  • 免费网站制作模板百度网站怎么做视频播放器