美文网首页
Kotlin Property访问权限

Kotlin Property访问权限

作者: 左大人 | 来源:发表于2018-08-23 19:51 被阅读0次

    image.png

    今天在使用kotlin时遇到一个问题,代码如下:

    @RouteNode(path = "/info", desc = "用户信息展示页面")
    class UserActivity : Activity() {
    
        @Autowired
        var mUser: User = User()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            //解析Autowired对应的属性内容
            AutowiredService.Factory.getSingletonImpl().autowire(this)
    
            setContentView(R.layout.activity_user)
            val ft = fragmentManager.beginTransaction()
            ft.replace(R.id.flContainer, UserFragment.newFragment(mUser.userName, mUser.userAge, mUser.userHobby))
            ft.commitAllowingStateLoss()
        }
    
    }
    

    程序编译时,解析Autowired注解出错,报错信息如下:

    e: 错误: [Router-Anno-Compiler]-- An exception is encountered, [The autowired fields CAN NOT BE 'private'!!! please check field [mUser] in class [basic.app.com.user.view.activity.UserActivity]]
    
    

    mUser字段是private修饰,What?
    据我所知,Kotlin中,只要不显示添加访问权限修饰,默认都是public,这里怎么会是private呢。
    然后翻阅资料,在Kotlin官网上找到解释:

    image.png

    原来如此,Kotlin类中默认的属性编译成class字节码的时候都会变成private类型,并且生成对应的getter和setter方法。如果字段以is开头,如isOpen,那么setter方法会变成setOpen(xx: Any),getter方法会变成isOpen(): Any,此处is开头的属性没有任何限制,不必一定为Boolean类型。

    Instance Fields

    通过JvmField可以改变Property的访问权限,使得类的对象在外部可以访问该Property:

    image.png

    Static Fields

    通过companion object + JvmField可以把Property设置为静态属性:

    image.png

    通过object + lateinit也可以把属性变为静态属性:

    ![image.png](https://img.haomeiwen.com/i9942787/f0937599312ceead.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    通过object + const也可以把属性变为静态属性:

    image.png

    Static Method

    说道这里,顺便讲一下怎么定义静态方法,两种方式,第一种和JvmField类似,使用companion object + JvmStatic:

    image.png

    使用object + JvmStatic来实现:

    image.png

    解决问题

    在mUser字段上加上@JvmFiled,成功解决问题了。

    参考文章

    https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#instance-fields

    相关文章

      网友评论

          本文标题:Kotlin Property访问权限

          本文链接:https://www.haomeiwen.com/subject/udnmiftx.html