kotlin几个注解

注解

@JvmField

我们都知道kotlin默认会给var的变量生成get和set方法,当我们给变量复制或者获取变量值的时候实际上相当于调用了get和set方法。

那么如果我们单纯的就是想设置变量值或者获取值,似乎就不需要默认生成get、set方法了。

如下例子:

class Person {
    var name: String="李白"//变量的get和set方法无论是否复写,都会被创建,但是实际上完全可以不需要,
        get() = field
        set(value) {
            field = value
        }
    
}

fun main() {
    Person().run {
        println(name)
        name="杜甫"
        println(name)
    }
}

我们对上面代码使用@JvmField进行一下修改,如下:

class Person {
    @JvmField var name: String="李白"//使用@JvmField修饰后的变量,不会被默认生成get和set方法了,变量访问自然比调用方法效率要高,如果能默认不生成就好了。
}

fun main() {
    Person().run {
        println(name)
        name="杜甫"
        println(name)
    }
}

@JvmOverloads

一句话概括,@JvmOverloads修饰的kotlin方法,编译期间可以给方法的默认参数生成重载,从而保证java调用kotlin方法仍然可以保证简洁

我们都知道kotlin是支持默认参数的,如下的代码

class Anim(){
    fun sport(method:String="翅膀",breath:String="鼻子"){
        println("使用翅膀移动")
        println("使用鼻子呼吸")
    }
}
fun main() {
    Anim().sport()//因为有默认参数值,所以这里可以什么都不传
}

因为sport有默认参数值,所以这里可以什么都不传

但是,如果我们使用java调用sport方法,那么就必须两个参数都传,否则会报如下错误:

为了解决这个尴尬的问题我么可以引入@JvmOverloads,这样编译器会默认为我们生成多个构造函数,保证java可以不用传太多参数,代码如下:

class Anim(){
    @JvmOverloads//比上面的代码仅仅是这里多了一个注解
    fun sport(method:String="翅膀",breath:String="鼻子"){
        println("使用翅膀移动")
        println("使用鼻子呼吸")
    }
}
fun main() {
    Anim().sport()
}

我么来看一下java调用方法时候的提示:


由上图可以发现,kotlin编译器生成了三个重载方法。

不过建议还是all in kotlin这样最爽。

@JvmStatic

这依然是一个为了简化java调用kotlin方法的注解,主要针对kotlin的object修饰类中的方法,或者object component中的方法

举例:
我们生成如下的一个类

object Person{
    fun eat(){
    }
}

这样一个类,方法相当于是静态的,一切看起来都很好,但是当我们再java中想调用eat方法的时候,写法是这样的。

public static void main(String[] args) {
        Person.INSTANCE.eat();//只能借助INATANCE对象调用eat方法
    }

借助INSTANCE虽然调用起来没问题,但终归看着还是不爽的,使用@JvmStatic可以治好这种不爽。

使用@JvmStatic修饰后,代码如下:

kotlin中代码:

object Person{
    @JvmStatic
    fun eat(){
    }
}

在java中调用如下:

由上图可以发现,使用@JvmStatic修饰后,eat方法就可以像java中的静态方法一样的方式调用了。

@JvmSynthetic

使用@JvmSynthetic修饰的方法和字段,只能在kotlin中调用。

这是个好东西,可以帮助团队快速强制过渡到kotlin

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值