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编程,通过扩展可以实现工具类的作用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值