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

石景山网站建设有哪些公司深圳企业网站建设设计制作方案

石景山网站建设有哪些公司,深圳企业网站建设设计制作方案,wordpress wpdx主题,网络营销宣传的方法有哪些1.扩展函数 1.1 作用域:扩展函数写的位置不同,作用域就也不同 扩展函数可以写成顶层函数(Top-level Function),此时它只属于它所在的 package。这样你就能在任何类里使用它: package com.rengwuxianfun …

1.扩展函数

1.1 作用域:扩展函数写的位置不同,作用域就也不同

扩展函数可以写成顶层函数(Top-level Function),此时它只属于它所在的 package。这样你就能在任何类里使用它:

package com.rengwuxianfun String.method1(i: Int) {...
}
...
"rengwuxian".method1(1)

扩展函数也可以写在某个类里。然后你就可以在这个类里调用这个函数,但还是必须使用那个前缀类的对象来调用它:

class Example {fun String.method2(i: Int) {...}..."rengwuxian".method2(1) // 可以调用
}

注意:它属于Example的成员函数(限定该函数的调用范围),又属于String的扩展函数(限定该函数可以被谁调用)

1.2 指向扩展函数的引用

扩展函数如果是Top-Level的话,可以被引用;但是是某个类的成员函数,那就不可以被引用了:

fun String.method1(i: Int) {...
}
...
String::method1

1.3 调用扩展函数的引用

直接调用或者用 invoke() 都可以,不过要记得把 Receiver 也就是接收者或者说调用者填成第一个参数

(String::method1)("rengwuxian", 1)
String::method1.invoke("rengwuxian", 1)// 以上两句都等价于:
"rengwuxian".method1(1)

1.4 把扩展函数的引用赋值给变量

同样的,扩展函数的引用也可以赋值给变量:

val a: String.(Int) -> Unit = String::method1

然后你再拿着这个变量去调用,或者再次传递给别的变量,都是可以的:

"rengwuxian".a(1)
a("rengwuxian", 1)
a.invoke("rengwuxian", 1)

1.5 有无 Receiver 的变量的互换

class Example {fun happy(i: Int) {}
}
fun Example.sad(i: Int) {}

每一个有 Receiver 的函数(其实就是成员函数和扩展函数),它的引用都可以赋值给两种不同的函数类型变量:一种是有 Receiver 的,一种是没有 Receiver 的:

val n: (Example, Int) -> Unit = Example::happy
val m: Example.(Int) -> Unit = Example::happy
var x: (Example, Int) -> Unit = Example::sad
var y: Example.(Int) -> Unit = Example::sad
x = m
y = n

1.6 改变原本的性质,使其可能无法被允许调用

一个普通的无 Receiver 的函数也可以直接赋值给有 Receiver 的变量:

fun mad(e: Example, i: Int) {}
...val e: (Example, Int) -> Unit = ::mad
val f: Example.(Int) -> Unit = ::mad通过这些类型的互相转换,你可以把一个本来没有 Receiver 的函数变得可以通过 Receiver 来调用:
Example().mad(1)  //不允许调用,报错
Example().e(1)  //不允许调用,报错
Example().f(1)  //允许调用

当然了你也可以反向操作,去把一个有 Receiver 的函数变得不能用 Receiver 调用:

fun Example.sad(i: Int) {}
...val g: (Example, Int) -> Unit = Example::sad
val h: Example.(Int) -> Unit = Example::sad
Example().sad(1)  //允许调用
Example().g(1)  //不允许调用,报错
Example().h(1)  //允许调用

2.扩展属性

2.1 扩展变量与扩展常量

使用 var 修饰扩展的变量属性 , 变量必须定义 getter 和 setter 属性访问器;
使用 val 修饰扩展的常量属性,常量扩展属性只能且必须定义 getter 方法

2.2 定义位置

class Example {var name: String = "Tom"var age: Int = 18
}

和扩展函数一样,扩展属性可以定义在Top-level,也可以定义在某个类中
定义在Top-level,那么全局都可以使用该属性:

var Example.olderAge: Intget() {return this.age + 1}set(value) {this.age = value -1}val Example.nameAndAge: Stringget() {return "${this.name} : ${this.age}"}

定义在某个类中,那么只能在该类中使用:

class Example {var name: String = "Tom"var age: Int = 18var Example.olderAge: Intget() {return this.age + 1}set(value) {this.age = value -1}val Example.nameAndAge: Stringget() {return "${this.name} : ${this.age}"}
}

2.3 扩展属性没有幕后字段

扩展属性由于没有幕后字段 , 因此不能定义属性的初始化器 ,给扩展属性赋初值会报以下错误:
在这里插入图片描述

扩展属性没有幕后字段不能保存实际的字段值 , 其属性访问器中只能调用对象中的属性和方法 , 不能调用扩展属性本身


参考文章:
会写「18.dp」只是个入门——Kotlin 的扩展函数和扩展属性(Extension Functions Properties)

http://www.yayakq.cn/news/657780/

相关文章:

  • 公司网站建设申请江门网站建设方案推广
  • 做百度网站要注意什么html网页标题代码怎么写
  • 网站模板 介绍浙江省建设网
  • 青岛做网站皆赴青岛博采mediawiki wordpress
  • 手机网站封装用户体验长沙电商网站开发
  • 小说网站的网编具体做哪些工作网站app建设图片素材
  • seo网站优化培训怎么做安阳网站设计公司
  • 青岛关键词网站排名网站建设和客户对接内容
  • 福州专业网站建设网站查询功能是用什么程序做的
  • 做电影网站一年赚多少钱网站建设php心得体会
  • wordpress建站后发布影视后期制作培训机构全国排名
  • 快普网站怎么做采购退货php智能建站系统
  • 做网站公司哪好免费出装修效果图
  • php做门户网站运城盐湖区姚孟信通网站开发中心
  • 找第三方做网站 需要注意如何制作小程序商城
  • 网站结构 扁平结构 树状结构文本网站开发英文文献
  • 产地证是在哪个网站上做网站建设的课程
  • 网站建设必须买主机吗长沙建网站速成班
  • 灯饰网站开发网站域名 文件夹
  • 国家工程建设标准化网站上海缪斯设计公司的主题文化
  • 企业年底做网站的好处app制作工具无需编程
  • 电商网站会员体制怎么做长沙网站排名优化价格
  • 济南最好的网站制作公司wordpress 附件路径
  • 淘宝网可以做网站吗福州seo结算
  • 商业网站建设案例视频秦皇岛城乡住房建设厅网站
  • 开源网站开发文档下载怎么样把自己的产品网上推广
  • 外海网站如何做网站的推广怎样在微信做产品网站
  • 企业网站备案网地址在线设计平台的发展
  • 网站建设seo优化内蒙广州企业电话大全
  • 中国建设银行信用卡旅游卡服务网站网站推广是怎么做的