Kotlin之扩展函数

在介绍扩展函数之前,我们先简单介绍一下变量和属性:

变量

变量通常可以改变的,常量是不可改变的.例如java中的final修饰的变量就是常量不可改变的.
在kotlin中我们用val和var来修饰,val修饰的变量是不可变变量,var修饰的变量是可变变量

在kotlin有时候不需要去指定变量的类型,在初始化的时候回自动推断出来,这样可以让代码更加清晰和简洁
val dog = Dog() // Dog 对象
val str = “string” // String
val age = 18 // Int
val actionBar = supportActionBar //ActionBar
但是有些情况下是需要指定类型的,例:
val context:Context = Activity

属性

属性与Java中的字段是相同的,但是更加强大.我们通过一个例子来比较他们的不同之处
`java:

public class Person {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

在java中我们通过setter和getter函数来操作和访问属性

kotlin:

public class Person {
    var name: String = ""
}

val person = Person()
person.name = "name"
val name = person.name

在使用的时候直接使用就可以了,属性会默认使用getter和setter,当然我们也可以修改代码:

public classs Person {
    var name: String = ""
    get() = field.toUpperCase()
    set(value){
        field = "Name: $value"
    }
}

filed是kotlin的预留字段用来访问属性

如果属性是val修饰的,这是我们只可以访问,不可以修改;既只能调用getter而不能调用它的setter

public classs Person {
    var name: String = ""
    get() = field.toUpperCase()
}

如果只是用来接收数据的,例如在android中,我们用来将json数据转成对象,从而展示在页面中,这时候最好使用val

data class City(val id: Long, val name: String, val coord: Coordinates, val country: String, val population: Int)
data class Coordinates(val lon: Float, val lat: Float)

扩展函数

扩展函数是指在一个类上增加一种新的行为,甚至我们没有这个类代码的访问权限.这是一个缺少有用函数的类上扩展的方法.在java中我们通常会实现很多带有static的工具类.kotlin中我们可以使用扩展函数来实现这些功能.
扩展函数并不是真正地修改了原来的类,它是以静态导入的方式来实现的。扩展函数可以被声明在任何文件中,因此我们可以把一系列有关的函数放在一个新建的文件里。

例如:
View类型的扩展函数:我们可以创建一个kotlin文件ViewExtensions.kt

val View.ctx: Context
    get() = context

var TextView.textColor: Int
    get() = currentTextColor
    set(v) = setTextColor(v)

fun View.slideExit() {
    if (translationY == 0f) this.animate().translationY(-height.toFloat())
}

fun View.slideEnter() {
    if (translationY < 0f) this.animate().translationY(0f)
}

fun Context.setTextViewRightImg(textView: TextView, res: Int) {
    val drawable = ContextCompat.getDrawable(this, res)
    drawable?.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)
    textView.setCompoundDrawables(null, null, drawable, null)
}
......

// 调用
 it.second.textColor = Color.RED
 toolbar.slideExit() else toolbar.slideEnter()
 ......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值