? ? ? 小菜今兒被問到一個(gè)問題琳骡,使用 Kotlin 時(shí)出現(xiàn)‘...has private access in...’無法獲取其他類中實(shí)體或?qū)傩运夏纭S?Java 實(shí)現(xiàn)時(shí)最易,一個(gè) public 即可訪問到,但是 Kotlin 中只有 var 和 val藻懒,在之前加上 public 并不能直接解決問題嬉荆。
? ? ? 小菜按照自己的理解和在使用方法,粗糙的說一下鄙早。
實(shí)體類:
? ? ? 在初始化實(shí)體時(shí)前面加上 open 屬性:open var user = UserBean()。
? ? ? 由于 Kotlin 中所有類和方法默認(rèn)都是 final 的舱污,不能直接繼承或重寫弥虐,需要繼承的類或類中要重寫的方法都應(yīng)當(dāng)在定義時(shí)添加 open 關(guān)鍵字媚赖。
屬性:
? ? ? 在初始化屬性時(shí)前面加上?@JvmField 注解:@JvmField var address = "北京市海淀區(qū)"珠插,但是在應(yīng)用 @JvmFieId 注解時(shí)需要注意,該屬性不可為 null豺妓,一旦為 null 則會(huì)報(bào)空指針布讹,因?yàn)橛迷撟⒔饩幾g后,默認(rèn)為 @NotNull白嘁。
? ? ? Kotlin?生成 .java 文件時(shí)屬性默認(rèn)為?private膘流,給屬性添加 @JvmField 注解聲明可以轉(zhuǎn)成?public。
如下例:
1.? Fragment 中初始化一個(gè)屬性 address 和一個(gè)實(shí)體類 UserBean耕魄,并給這個(gè)用戶實(shí)體賦值彭谁,在 Activity 中獲取這個(gè)屬性和實(shí)體類的信息。
2.? 之后在 Activity 中給 address 重新賦值则奥,在 Fragment 中獲取 address 屬性狭园,更新數(shù)據(jù)。