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

大学 建网站如何做微信小程序店铺

大学 建网站,如何做微信小程序店铺,小程序制作报价单,平面设计师求职网1 类的扩展 Kotlin 提供了扩展类或接口的操作#xff0c;而无需通过类继承或使用装饰器等设计模式#xff0c;来为某个类添加一些额外的属性或函数#xff0c;我们只需要通过一个被称为扩展的特殊声明来完成。通过这种机制#xff0c;我们可以将那些第三方类不具备的功能强…1 类的扩展 Kotlin 提供了扩展类或接口的操作而无需通过类继承或使用装饰器等设计模式来为某个类添加一些额外的属性或函数我们只需要通过一个被称为扩展的特殊声明来完成。通过这种机制我们可以将那些第三方类不具备的功能强行进行扩展方便我们的操作。 1.1 扩展内置类 1.1.1 扩展属性 fun main() {var str abcstr.property 5 // 打印: set property, value5var property str.property // 打印: get propertyprintln(property) // 打印: 10 }var String.property: Intset(value) {println(set property, value$value)}get() {println(get property)return 10} 说明扩展属性并不是真的往类中添加属性也不会真的插入一个成员字段到类的定义中导致没有变量存储我们的数据我们只能明确定义一个 getter 和 setter 来创建扩展属性才能让它使用起来真的像是类的属性一样。 如下如果没有定义 getter 和 setter方法将会报错如下。 1.1.2 扩展函数 fun main() {var str abcstr.myFun(xxx) // 打印: myFun, thisabc, valuexxx }fun String.myFun(value: String) {println(myFun, this$this, value$value) } 1.2 扩展自定义类 1.2.1 扩展属性 1扩展新属性 fun main() {var stu Student()stu.name Mary // 打印: set name, valueMaryvar name stu.name // 打印: get nameprintln(name) // 打印: Tom }class Studentvar Student.name: Stringset(value) {println(set name, value$value)}get() {println(get name)return Tom} 2扩展旧属性 fun main() {var stu Student(Jack)stu.name Mary // 无打印var name stu.name // 无打印println(name) // 打印: Mary }class Student(var name: String)var Student.name: String // 扩展属性不会生效set(value) {println(set name, value$value)}get() {println(get name)return Tom} 说明如果扩展类中的同名同类型属性扩展将不会生效。 1.2.2 扩展函数 1扩展新函数 fun main() {var stu Student(Mary)stu.test() // 打印: test, nameMary }class Student(var name: String)fun Student.test() {println(test, name$name) } 2扩展旧函数 fun main() {var stu Student(Mary)stu.test() // 打印: inner, nameMary }class Student(var name: String) {fun test() {println(inner, name$name)} }fun Student.test() { // 扩展函数不会生效println(extended, name$name) } 说明如果扩展类中的同名同参函数扩展将不会生效。 1.3 重写父类的扩展函数 类的扩展是静态的实际上并不会修改它们原本的类也不会将新成员插入到类中仅仅是将我们定义的功能变得可调用使用起来就像真的有一样。同时在编译时也会明确具体调用的扩展函数。 1.3.1 扩展属性 fun main() {var stu: Student Student()var name1 stu.name // 打印: Student, get nameprintln(name1) // 打印: Maryvar peo: People stuvar name2 peo.name // 打印: People, get nameprintln(name2) // 打印: Tom }open class People class Student: People()var People.name: Stringset(value) {println(People, set name, value$value)}get() {println(People, get name)return Tom}var Student.name: Stringset(value) {println(Student, set name, value$value)}get() {println(Student, get name)return Mary} 1.3.2 扩展函数 fun main() {var stu: Student Student()println(stu.type()) // 打印: Studentvar peo: People stuprintln(peo.type()) // 打印: People }open class People class Student: People()fun People.type() People fun Student.type() Student 1.4 匿名扩展函数 匿名函数的使用详见 →【Kotlin】函数。 fun main() {var myFun: String.() - Int fun String.(): Int {return this.length}println(abc.myFun()) // 打印: 3 } 可以使用 Lambda 表达式简化如下Lambda 表达式的使用详见 → 【Kotlin】Lambda表达式。 fun main() {var myFun: String.() - Int {this.length}println(abc.myFun()) // 打印: 3 } 1.5 扩展函数作为参数 fun main() {var len abc.len { this.length }println(len) // 打印: 3 }fun String.len(func: String.() - Int): Int {return func() } 2 官方扩展函数 2.1 源码 Kotlin 提供了一些泛型扩展函数在 Standard.kt 中如apply、also、run、let、takeIf、takeUnless 等。 apply、also、run、let 的区别如下作用是执行 block 函数的内容并且返回 T 或 block 的返回值通常用于判空处理。 函数block是否为扩展函数block入参block返回值函数返回值访问 T 对象apply是无无Tthisalso否T无Titrun是无RRthislet否TRRit 2.1.1 apply public inline fun T T.apply(block: T.() - Unit): T {...block()return this } 2.1.2 also public inline fun T T.also(block: (T) - Unit): T {...block(this)return this } 2.1.3 run public inline fun T, R T.run(block: T.() - R): R {...return block() } 2.1.4 let public inline fun T, R T.let(block: (T) - R): R {...return block(this) } 2.1.5 takeIf public inline fun T T.takeIf(predicate: (T) - Boolean): T? {...return if (predicate(this)) this else null } 2.1.6 takeUnless public inline fun T T.takeUnless(predicate: (T) - Boolean): T? {...return if (!predicate(this)) this else null } 2.1.7 with public inline fun T, R with(receiver: T, block: T.() - R): R {...return receiver.block() } 说明with 不是扩展函数但入参 block 是扩展函数。  2.2 应用 2.2.1 apply 应用 fun main() {var stu Student()test(stu) }fun test(stu: Student?) {stu?.apply {this.name Tomthis.age 23}println(stu) // 打印: [Tom, 23] }class Student {var name: String? nullvar age: Int 0override fun toString(): String {return [$name, $age]} } 说明also、run、let 的应用与 apply 类似。 2.2.2 takeIf 应用 fun main() {var str ABCvar str2 str.takeIf { it.length % 2 1 }?.let { it it.reversed().substring(1) }println(str2) // 打印: ABCBA } 2.2.3 with 应用 fun main() {var str ABCvar len with(str) { this.length }println(len) // 打印: 3 }
http://www.pierceye.com/news/99314/

相关文章:

  • 做网站导航的厦门网站建设制作多少钱
  • 怎样免费注册网站域名鹤城建设集团网站
  • 3合1网站建设价格网站建设论坛快速建站
  • 怎样做钓鱼网站上海网站关键词排名优化报价
  • 昆明专业网站设计公司电商类网站设计模板
  • 网站流量用完了重庆网站推广
  • 网站管理助手数据库网站在建设中无法访问
  • 网站标题格式建设网站南昌
  • wordpress作企业网站好吗沈阳短视频制作公司
  • 表格网站怎么做的作文网站大全
  • 比特币网站建设专业网站建设企业网站制作
  • 故宫博物院官网网站咋做的山东省济宁市最新消息
  • 天河营销型网站建设html网页设计代码作业正能量
  • 国外网站设计欣赏智能获客系统
  • 济南网站建设599网站建设完工后在什么科目核算
  • 学校网站的作用app营销推广方式
  • 怎么做网站互换链接重庆工程建设信息网官网查询
  • 刚开始做网站要传数据库吗赛迪建设网站
  • 网站网络推广教程手机html网站开发视频
  • 网站弹出广告代码口碑好的龙岗网站建设
  • 东莞网站建设-搜盟网电商的运营推广
  • 美发网站 源代码网站建设的博客
  • 做电影视频网站赚钱嘛安溪人做的网站
  • 网站建设基础代码赣州专门网公司
  • 购物网站答辩ppt怎么做网站开发环境
  • 做网站的费用计入销售费用吗做装修效果图的网站
  • 企业网站制作深圳免费域名映射
  • 安徽建设厅网站施网站的静态页面谁做
  • 网站内页seo桂林山水甲天下是哪个景点
  • 外贸网站免费建站小榄网站建设公司