学习内容
1.扩展函数与属性
2.this关键字讲解
3.String类扩展属性
4.List扩展方法
package day1
//扩展函数
fun main(args:Array<String>){
println("aaabbcc".firstChar())
println("ccaddv".lastChar())
val list = mutableListOf(1,2,3,4,5,6,7)
val result = list.filter {
it % 2 ==1
}
println(result)
println(list.firstElement)
println(list.lastElement)
list.firstElement = -2
list.lastElement = 10
println(list.firstElement)
println(list.lastElement)
}
/**
* 扩展属性
* 给List添加一个扩展属性
*
*扩展属性允许出现在类或者文件中,不允许出现在方法
*
* this关键字:
* 在类的成员函数中,this指向这个类的当前实例对象。
* 扩展函数中或带接收者的函数字面值中。this代码调用函数时
* 点号左侧传递的接收者参数。
* 如果this没有限定符,那么它指向当前代码的最内层范围。
* 如果想要指向其他范围内的this,需要使用标签限定符。
*
* 扩展属性和扩展方法可以新建以一个公关文件作为一个工具类。
*
*/
var <T> MutableList<T>.firstElement: T
get() {
return this[0]
}
set(value) {
this[0] = value
}
var <T> MutableList<T>.lastElement: T
get() {
return this[this.size-1]
}
set(value) {
this[this.size-1] = value
}
/**
*
* String 类的扩展函数
* 目标类型.方法名
* 如果在其他package下需要导入函数名
*
*/
fun String.firstChar():String{
if(this.isEmpty()) return ""
return this[0].toString()
}
fun String.lastChar():String{
if (this.isEmpty()) return ""
return this[this.length-1].toString()
}
/**
* List扩展函数
*
*/
fun <T> List<T>.filter(predicate:(T)->Boolean):MutableList<T>{
val result = ArrayList<T>()
this.forEach {
if (predicate(it)) {
result.add(it)
}
}
return result
}