前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin ‘...has private access in...’ 解决

Kotlin ‘...has private access in...’ 解决

作者头像
阿策小和尚
发布2019-08-12 16:05:23
4.8K0
发布2019-08-12 16:05:23
举报
文章被收录于专栏:阿策小和尚阿策小和尚

和尚我最近被问到一个问题,使用 Kotlin 时出现 '…has private access in…' 无法获取其他类中实体或属性。用 Java 实现时,一个 public 即可访问到,但是 Kotlin 中只有 var 和 val,在之前加上 public 并不能直接解决问题。 和尚我按照自己的理解和日常使用方法,粗糙的说一下。


实体类:

  • 在初始化实体时前面加上 open 属性:open var user = UserBean()。
  • 由于 Kotlin 中所有类和方法默认都是 final 的,不能直接继承或重写,需要继承的类或类中要重写的方法都应当在定义时添加 open 关键字。

属性:

  • 在初始化属性时前面加上 @JvmField 注解:@JvmField var address = "北京市海淀区",但是在应用 @JvmFieId 注解时需要注意,该属性不可为 null,一旦为 null 则会报空指针,因为用该注解编译后,默认为 @NotNull。
  • Kotlin 生成 .java 文件时属性默认为 private,给属性添加 @JvmField 注解声明可以转成 public。

  1. Fragment 中初始化一个属性 address 和一个实体类 UserBean,并给这个用户实体赋值,在 Activity 中获取这个属性和实体类的信息。
代码语言:javascript
复制
class FragmentEightK : BaseFragment() {

    @JvmField var address = "北京市海淀区"
//    var address = "北京市海淀区"
    open var user = UserBean()

    override fun initViews(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
        val view = inflater?.inflate(R.layout.fragment_four, null)
        return view!!
    }

    override fun initData() {
        user.age = 10
        user.name = "张三"
    }

    override fun onPause() {
        super.onPause()
        Log.e("Fragment-地址", address)
    }

    override fun clearData() {
    }

    override fun setDefaultFragmentTitle(title: String?) {
    }
}

Kotlin Fragment 中初始化以及更新数据(仅测试)

  1. 之后在 Activity 中给 address 重新赋值,在 Fragment 中获取 address 属性,更新数据。
代码语言:javascript
复制
ivToolbarTitle.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.e("Activity-地址",fragmentEightK.address);
        fragmentEightK.address = "北京市昌平区";
//      fragmentEightK.address = null;
        Log.e("姓名:"+fragmentEightK.getUser().name,"年龄:"+fragmentEightK.getUser().age);
    }
});

Activity 中获取数据以及重新赋值(仅测试)


下面的是和尚的公众号,欢迎关注哦~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿策小和尚 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档