IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> kotlin几个注解 -> 正文阅读

[移动开发]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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:27:21  更:2021-11-22 12:28:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:51:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码