java 扩展属性,Java转Kotlin:扩展方法与扩展属性

1 使用举例

1.1 扩展方法使用场景举例

一、为String类添加一个判断是否是邮箱地址的扩展方法isEmail():

fun String.isEmail(): Boolean {

//TODO: 判断是否符合邮箱格式

return true

}

fun main() {

"example@example.com".isEmail()

}

复制代码

二、为String类添加一个给字符串前后添加padding的扩展方法padding():

fun String.padding(count:Int = 0, char:Char = ' '): String {

val padding = (1..count).joinToString(""){char.toString()}

return "${padding}${this}${padding}"

}

fun main() {

println("Hello Kotlin".padding(10, '#'))

}

复制代码

三、为String类添加一个字符串翻倍的扩展方法times():

fun String.times(count:Int = 1): String {

return (1..count).joinToString(""){this}

}

fun main() {

println("Hello Kotlin".times(10))

}

复制代码

1.2 扩展属性

一、为Person类新增一个occupation属性,该occupation属性使用job属性存储状态:

//这里的Person类和Policeman类就是《Java转Kotlin:类和接口》中的Person类和Policeman类

var Person.occupation: String

get() = "$name's occupation is $job."

set(value) {

job = value

}

fun main() {

val jack = Policeman("mike", 18, "Policeman", 56);

println(jack.job)

println(jack.occupation)

jack.occupation = "Fireman"

println(jack.job)

println(jack.occupation)

jack.job = "Policeman"

println(jack.job)

println(jack.occupation)

}

复制代码

注意!扩展属性无幕后字段(Extention property does not have a backing field.)。如果一定要存储扩展属性的状态的话,需要利用类里面已有的非扩展属性。

673c9f19d52f1ca7aace95421122a41d.png

二、为Person类新增一个扩展属性money:

class Person {

var pocket: Double = 0.0

}

var Person.money: Double

get() = this.pocket

set(value) {

this.pocket = value

}

fun main() {

val jack = Person();

println(jack.pocket)

println(jack.money)

jack.money = 20.0

println(jack.pocket)

println(jack.money)

jack.pocket = 36.0

println(jack.pocket)

println(jack.money)

}

复制代码

注意!若将pocket设置为private,则无法被扩展属性访问,如下:

6409fea87c018045e418f60ecb88b499.png

注意!说到没有backing field,interface中的property也没有backing field。因为interface原则上仅定义行为,不存储状态。如下:

46f2290d4c5a7d736b693f6b7cbd0622.png

2 扩展方法的类型

04d1256cea1147930f51223d06c10295.png

3 本节回顾

13dce9b2f4061ba6332e5b50a556dfd9.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值