我的Kotlin 学习之路(二)Kotlin之扩展

为什么从关键字一下就跳到扩展了?我们知道JAVA中没有扩展的概念,Kotlin中引入了扩展,如果我能预测成功的话,这将成为对JAVA最大的挑战。。。

1、什么叫扩展extension?

      扩展其实就是自定义原始类的方法和属性

2、为什么要扩展?

      当原始类中现有的方法或属性已不能满足开发需要或者开发者需要更便利、更灵活的方法及属性时使用

3、扩展的种类?

      扩展分为扩展方法和扩展属性

4、扩展的实现及调用?

      扩展实际上相当于原始类的静态方法,调用简单


下面codeing

先定义一个C类,一个成员方法,一个属性

class C(var size:Int = 0){ 

         fun foo (){ 

           println("成员方法")

         }

}


//C类扩展方法 

//C类本没有f()这个方法,f()是开发者自定义的,是属于C类的静态方法,如果这个方法也叫foo(),则调用成员方法

fun C.f(){

      println("扩展方法")

}


//C类扩展属性 lastIndex  

//C类没有lastIndex的属性,但是有size的属性,扩展属性必须要重写get() !

val C.lastIndex:Int 

get() = size - 1



fun main(args: Array) {

      C(10).foo() //打印 “成员方法”

      C().f() //打印 “扩展方法”

      println("C.lastIndex = ${C(10).lastIndex}") //打印 9

}


5、扩展类声明位置?

扩展方法和扩展属性可以声明在顶层,而不是一个类里,比如新建 Extensions.kt类

/**

* 扩展类

* Created by ff on 2017/6/2.

*/

//Context 类的扩展 toast方法,可以用在任何Activity及Service中

fun Context.toast(str:String,duration:Int = Toast.LENGTH_SHORT){

        Toast.makeText(this,str,duration).show()

}


写到这,对扩展应该明白多了吧,以上就是扩展的简单解析和实现。希望能共同进步!

你可能感兴趣的:(我的Kotlin 学习之路(二)Kotlin之扩展)