函数作为对象属性:
//函数作为对象属性 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*/