Kotlin编程之扩展属性和扩展伴生对象
2017-05-31 22:04
316 查看
Kotlin编程相关知识点介绍:
Kotlin编程之使用Intellij IED和了解源文件(.kt)
Kotlin编程之类的介绍和使用
Kotlin编程之类的属性
Kotlin编程之方法
Kotlin编程之父类和继承父类
Kotlin编程之接口和实现接口
Kotlin编程之伴生对象,抽象类,密封类
Kotlin编程之嵌套类,内部类,匿名内部类
Kotlin编程之对象的表达式和声明
Kotlin编程之扩展方法
输出结果:
可知:
扩展并不会真正给类添加了成员属性,因此也没有办法让扩展属性拥有一个备份字段.这也是为什么初始化函数不允许有扩展属性。
扩展属性只能够通过明确提供 getter 和 setter方法来进行定义.
输出结果:
可知:
若是给伴生对象定义的属性扩展或者函数扩展,可以直接通过类名来调用。
在Day2017527.kt中编写代码如下:
输出结果:
可知:
在一个源文件中,编写包级别的扩展函数,在另外一个源文件中可以进行使用。
导入方式如下:
导入对应的包,这里是
当然也可以导入具体的路径,包.扩展函数名,这里是
Kotlin编程之使用Intellij IED和了解源文件(.kt)
Kotlin编程之类的介绍和使用
Kotlin编程之类的属性
Kotlin编程之方法
Kotlin编程之父类和继承父类
Kotlin编程之接口和实现接口
Kotlin编程之伴生对象,抽象类,密封类
Kotlin编程之嵌套类,内部类,匿名内部类
Kotlin编程之对象的表达式和声明
Kotlin编程之扩展方法
扩展属性
在Kotlin编程,对类的函数进行扩展外,也支持属性扩展。package com.xingen.kotlin.day2017527 fun main(args: Array<String>) { var list=listOf("1",2,"3") println(list.lastIndex) } /** * 属性扩展 * 这里,给List类扩展一个lastIndex的属性,但是不会真的作为成员属性。 */ val <T> List<T>.lastIndex:Int get(){ //等同于get=size-1,这里返回最后一个元素的角标 return this.size-1 }
输出结果:
2
可知:
扩展并不会真正给类添加了成员属性,因此也没有办法让扩展属性拥有一个备份字段.这也是为什么初始化函数不允许有扩展属性。
扩展属性只能够通过明确提供 getter 和 setter方法来进行定义.
伴生对象的扩展
在Kotlin编程中,一个类定义了伴生对象,也可以给伴生对象的属性扩展和函数扩展。package com.xingen.kotlin.day2017527 fun main(args: Array<String>) { Day2017527.test() } /** * 定义伴生对象 */ class Day2017527{ companion object{ } } /** * 伴随对象扩展: * 这里扩展一个方法 */ fun Day2017527.Companion.test(){ println("伴随对象的扩展") }
输出结果:
伴随对象的扩展
可知:
若是给伴生对象定义的属性扩展或者函数扩展,可以直接通过类名来调用。
扩展的作用域
在Test.kt中编写代码如下:package com.xingen.kotlin.day2017527 /** * 对函数进扩展: * 在函数前面指定一个接受者,这里的接受者是MutabList<E>集合。 * 为它扩展一个swap函数 * 扩展函数的this指向接受者对象。 * */ fun <T> MutableList<T>.swap(x:Int,y:Int){ //利用一个中间变量,互换之指定位置的值。 val temp=this[x] this[x]=this[y] this[y]=temp }
在Day2017527.kt中编写代码如下:
package com.xingen.kotlin.day2017527 //导入需要用到扩展函数所在的包 import com.xingen.kotlin.day2017527.* /** * Created by ${新根} on 2017/5/28 0028. * 博客:http://blog.csdn.net/hexingen */ fun main(args: Array<String>) { /** * 调用MutablListOf类的扩展方法swap( ) */ var mutableList=mutableListOf("1",2,3) println(mutableList) //使用自定义的扩展函数 mutableList.swap(0,2) println(mutableList) }
输出结果:
[1, 2, 3] [3, 2, 1]
可知:
在一个源文件中,编写包级别的扩展函数,在另外一个源文件中可以进行使用。
导入方式如下:
导入对应的包,这里是
import com.xingen.kotlin.day2017527.*。
当然也可以导入具体的路径,包.扩展函数名,这里是
import com.xingen.kotlin.day2017527.swap。
扩展的好处
通过函数扩展,属性扩展,伴生对象扩展的接触,方面自定义一些常用的功能代码。这在java编程中,通常是放到util类中。在Kotlin编程,通过扩展可以实现工具类的作用。相关文章推荐
- Kotlin学习(四)—— 类和对象,继承,覆盖,抽象类,属性和字段,接口,可见性修饰符,扩展
- Kotlin学习(四)—— 类和对象,继承,覆盖,抽象类,属性和字段,接口,可见性修饰符,扩展
- Kotlin编程之伴生对象,抽象类,密封类
- Lua编程示例(二):面向对象、metatable对表进行扩展
- WPF 之 XAML语法,对象属性赋值(简单赋值、TypeConverter 标签属性与对象属性映射、标记扩展),引用外部库
- Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段
- JS中禁止对象属性扩展、密封对象、冻结对象
- SQLServer错误:过程 sp_addextendedproperty,第 xxx 行对象无效。'dbo.xxx.xxx' 不允许有扩展属性,或对象不存在。
- Kotlin系列七----属性和对象
- obj-c编程01[扩展学习01]:对象消息机制工作原理
- JavaScript事件编程入门案例和对对象属性的遍历
- 从零开始学_JavaScript_系列(40)——对象的扩展(3)当枚举、原型链遇见对属性的操作
- 解析Kotlin函数和属性扩展
- 编程必读:Netscape 6 支持的对象和属性列表
- js面对对象编程(二):属性和闭包
- SQLServer在数据库对象上使用扩展属性
- C#3.0 之 自动属性 对象初始化器,集合初始器,扩展方法 (转)
- JS中禁止对象属性扩展、密封对象、冻结对象
- Kotlin的伴生对象的理解
- C#可扩展编程之MEF(三):导出类的方法和属性