/*
* 扩展:对既有的类增加新功能而无需继承该类,即无法获取其源代码
* 主要作用:“立即”为相关类整体上添加“工具类”方法或属性
* Kotlin支持:扩展函数,扩展属性
*
*与接受者类中参数,名字都一样的扩展是无效的
* 尽量避免与已有的名字重名,如果一定要重名,参数名和类型也要不一样
* */
//扩展函数:fun 接受者类型.新扩展函数名(参数类别){函数实现}
//普通函数扩展:整数平方
fun Int.square():Int{
return this*this
}
//泛型属性扩展
//1.普通属性扩展。例子:整数的下一个数字
val Int.next:Int
get() = this+1
//2.泛型属性扩展:数字类型中半径对应的面积:πr^2
val <T:Number>T.area:Double
get() = 3.14*this.toDouble()*this.toDouble()
fun main(args: Array<String>) {
println(3.square())
println(3.2.area)
print("5".toByte().area)
val a= arrayOf(1,2,6,-1,10)
println(a.big())
println(a.smal())
println(3.next)
}
//泛型函数扩展:取数字型数组中最大元素
fun <T>Array<T>.big():T
where T:Number,T:Comparable<T>
{
var big=this[0]
for (i in 1..lastIndex){
val element=this[i]
if (element>big)
big=element
}
return big
}
//泛型函数扩展:取数字型数组中最小元素
fun <T>Array<T>.smal():T
where T:Number,T:Comparable<T>
{
var smal=this[0]
for (i in 1..lastIndex){
val element=this[i]
if (element<smal)
smal=element
}
return smal
}