Kotlin 对象初识2-函数作为对象属性,getter和setter的设置

函数作为对象属性:

//函数作为对象属性
class  NumberCompution(val num1:Int,val num2:Int ,var  operator:(Int,Int)->Int){

    fun  operation(){
        println("operation result:${operator(num1,num2)}")
    }

}

测试函数作为对象属性的结果:

fun main(args: Array<String>) {
    /**
     * 通过实例化传入两个构造参数 10,20
     * 用lambda传入函数属性参数 { x, y -> x + y }
     * 设定参数x,设定参数y 用->连接参数和主体
     * 主题中有返回值,省略;return
     */
    val numberCompution = NumberCompution(10, 20, { x, y -> x + y })
    numberCompution.operation()
    val numberCompution1 = NumberCompution(10, 20, { x, y -> x * y })
    numberCompution1.operation()
}

getter和setter的设置:

//编译期常量  用const做修饰符
const val STR: String = "l  sAdult  Changed"

class CustomType(age: Int) {

    val fixed = 1 //常量 只读属性 不允许改变重新赋值 不允许setter 只允许getter

    var notFixed = 1 // 变量 可更改属性 允许setter和getter

    /**
     * 自定义getter时一定要说明属性类型,不然编译器会报错
     * 从Kotlin1.1开始,getter能自动推断出类型,不需要说明具体类型
     */
    var isAudit: Boolean = false
        private set
//        get() = age >= 18//boolean getter 写法

    var age = age
        set(value) {
            field = value
            if (age >= 18) {
                isAudit = true
                println(STR)
            }
        }

    var addAge
        get() = 0
        set(value) {
            age += value
        }


}

getter和setter的结果测试:

val customType = CustomType(13)

println(customType.isAudit)

customType.addAge = 10
println(customType.age)
/**
 * false
 * 23
 * false输出false时,是因为内部设置了set 为private
 */
println(customType.isAudit)
customType.age = 18
println(customType.isAudit)

/*输出:false
l  sAdult  Changed
23
true
l  sAdult  Changed
true*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值