Android---Kotlin 学习013

互操作性和可空性

Java 世界里所有对象都可能是 null,而 kotlin 里面不能随便给一个变量赋空值的。所有,kotlin 取调用 java 的代码就很容易出现返回一个 null,而 Kotlin 的接收对象不能为空,你不能想当然地认为 java 的返回值就能符合 kotlin 关于空值的规定。

此时,因为不知道返回的是否是 null,所以可以使用空安全操作符。如果为空,则不执行后面的函数。 

类型映射

代码运行时,所有的映射类型都会重新映射回对应的 Java 类型。

示例:

在 java 里声明一个 int 类型变量

public int score;

在 kotlin 里面调用这个属性,查看其类型

// 类型映射
println(StudentInfo.score.javaClass)

属性访问

kotlin 访问 java 的属性时,不需要调用相关 get() 方法。给 java 属性赋值时,也可以使用赋值语法来设置一个 Java 字段值。

@JvmName

 可以使用 @JvmName 注解指定编译类的名字

 示例:在 java 中调用 kotlin 的函数。

 可以看到,java 里使用 kotlin 文件里的函数时,会在函数名后加Kt(xxxKt)形成接收者。如果我们想要原来的名,而不加 Kt,那么就可以使用 @JvmName 来指定类名。

@JvmField

在 Java 里,不能直接访问 kotlin 的属性,例如 spells 属性,必须调用 getSpells() 方法。然而,你可以给 Kotlin 属性添加 @JvmField 注解,暴露它的支持字段给 Java 调用者,从而避免使用 get() 方法。与 kotlin 里直接访问 java 属性一样。

@JvmOverloads

@JvmOverloads 注解协助产生 Kotlin 函数的重载版本。设计一个可能会暴露给 Java 用户使用的 API 时,记得使用 @JvmOverloads 注解。这样,无论你是 Kotlin 开发者还是 Java 开发者,都会对这个 API 的可靠性感到满意。

如果在 java 里调用 deskmate() 只传一个参数,肯定会报错

为了实现和 kotlin 里一样的效果,只传一个参数,另一个参数使用默认值,那么就可以使用 @JvmOverloads 注解进行强制重载。

@JvmStatic 

\bullet @JvmField 注解还能用来以静态方式提供伴生对象里定义的值。

\bullet @JvmStatic 注解的作用类似于 @JvmField,允许你直接调用伴生对象里的函数

@Throws

抛出一个需要检查的指定异常,Java 和 Kotlin 有关异常检查的差异让 @Throw 注解给解决掉了,在编写供 Java 开发者调用的 Kotlin API 时,要考虑使用 @Throws 注解,这样,用户就知道怎么正确处理任何异常了。

@Throws(IOException::class)
fun acceptApology(){throw IOException()
}

示例:kotlin 里抛出异常,在 java 里处理

函数类型操作

函数类型和匿名函数能提供高效的语法用于组件间的交互,是 Kotlin 编程语言里比较新颖的特性。它们简洁的语法因->操作符实现,但 Java8 之前 JDK 版本并不支持 lambda 表达式。在 Java 里,Kotlin 函数类型使用 FunctionN 这样的名字的接口来表示,FunctionN 中的 N 代表值参数目。这样的 Function 接口有 23 个,从 Function0 到 Function22,每一个 FunctionN 都包含一个 invoke 函数,专用于调用函数类型函数,所以,任何时候需要调一个函数类型,都用它调用 invoke。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2660387.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

(13)Linux 进程的优先级、进程的切换以及环境变量等

前言:我们先讲解进程的优先级。然后讲解进程的切换,最后我们讲解环境变量,并且做一个 "让自己的可执行程序不带路径也能执行"的实践,讲解环境变量的到如何删除,最后再讲几个常见的环境变量。 一、进程优先级…

【Linux基础】8. 网络工具

文章目录 【 1. 查询网络服务和端口 】【 2. 网络路由 】【 3. 镜像下载 】【 4. ftp sftp lftp ssh】【 5. 网络复制 】 【 1. 查询网络服务和端口 】 全称 netstat(network statistics)网络统计。作用 netstat 命令用于显示各种网络相关信息&#xff…

微同城生活源码系统:专业搭建本地生活服务平台 附带完整的安装部署教程

随着移动互联网的普及,人们越来越依赖手机进行日常生活中的各种活动,包括购物、餐饮、娱乐等。而传统的本地生活服务平台往往存在着功能单一、用户体验差等问题,无法满足用户日益增长的需求。因此,开发一款功能强大、易用性强的本…

律师卷宗档案保存期限多久?律师档案卷宗如何整理?

律师卷宗档案的保存期限可以根据不同法律和法规进行调整,因此可能会有所不同。一般来说,律师卷宗档案的保存期限通常为10年以上。然而,具体的保存期限还会受到当地司法体系和律师协会规定的影响。建议您咨询所在地的律师协会或相关法律机构&a…

【IDEA - EasyCode】好物推荐 -> 代码自动生成工具

目录 一、EasyCode 一、EasyCode 只要是与数据库相关的代码都可以通过自定义模板来生成,支持数据库类型与 java 类型映射关系配置。 使用步骤如下: a)下载插件 b)准备一张表作为生成元数据,例如如下 user 表 c&…

Python入门学习篇(十一)——函数注释函数嵌套全局变量与局部变量

1 函数注释 1.1 使用说明 第一步 在函数体里面输入三个""" 第二步 回车1.2 示例代码 def quotient(divisor,dividend):""":param divisor: 除数:param dividend: 被除数:return: 商"""return divisor/dividendnum1int(input(&…

联营商自述被坑惨,加盟库迪没有未来?

撰稿 | 多客 来源 | 贝多财经 近日,库迪联营商在社交平台不约而同发出了致库迪咖啡管理层的公开信,两封公开信可谓字字珠玑,没有一句废话,揭开了库迪咖啡在细节、运营、扩张、培训等方方面面的“背后真相”。 两封公开信 折射库…

Linux内核模块基础知识

什么是内核模块? 内核是操作系统的中枢神经系统,控制着它所做的一切,包括管理硬件组件之间的交互和启动必要的 服务。内核在你看到的用户应用程序和运行所有东西的硬件(如 CPU,内存和硬盘驱动器)之间运行。…

如何在VSCode搭建ESP-IDF开发ESP32

文章目录 概要安装VScode安装ESP-IDF插件使用官方例程小结 概要 ESP-IDF(Espressif IoT Development Framework) 即乐鑫物联网开发框架,它基于 C/C 语言提供了一个自给自足的 SDK,可为在 Windows、Linux 和 macOS 系统平台上开发 ESP32 应用程序提供工具…

54.网游逆向分析与插件开发-游戏增加自动化助手接口-项目需求与需求拆解

内容来源于:易道云信息技术研究院VIP课 项目需求: 为游戏增加VIP功能-自动化助手。自动化助手做的是首先要说一下背景,对于授权游戏来讲它往往年限都比较老,老游戏和新游戏设计理念是不同的,比如说老游戏基本上在10年…

Ubuntu Desktop 22.04 桌面主题配置

Ubuntu Desktop 22.04 桌面主题配置 使用这么久 Ubuntu Desktop,本着不折腾的原则,简单介绍下自己的桌面主题配置。 安装 tweaks 安装 GNOME Shell 安装 GNOME theme安装 gnome-tweaks & chrome-gnome-shell sudo apt update # 安装 gnome-tweaks…

统信UOS linux下opencv应用编译时的头文件和库文件路径查找设置方法

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 老猿原来进行的C和C开发主要是基于windows环境的,目前要在统信UOS操作系统环境下编译opencv应用程序,其环境设置与windows环境下变化很多,今天就来介绍一下在统…

【Vue3】创建项目的方式

1. 基于 vue-cli 创建 ## 查看vue/cli版本,确保vue/cli版本在4.5.0以上 vue --version## 安装或者升级你的vue/cli npm install -g vue/cli## 执行创建命令 vue create vue_test本质上使用webpack,默认安装以下依赖: 2. 基于 vite 创建 官…

心晴图谱:大学生心理健康数据探秘与画布解读

心晴图谱:大学生心理健康数据探秘与画布解读 1. 引言2. 数据集介绍3. 技术选型4. 分析维度与功能5. 创新点6. 可视化大屏展示7. 结论与展望 当代大学生面临着越来越多的心理健康挑战,而通过对某省一些高校从2018年到2022年的大学生心理健康数据进行深入分…

Spring对bean的管理

一.bean的实例化 1.spring通过反射调用类的无参构造方法 在pom.xml文件中导入坐标&#xff1a; <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.29<…

SEO中的实体:它们是什么以及为什么它们很重要?

从了解搜索历史到区分实体与关键字&#xff0c;真正了解实体是什么&#xff0c;以便获得更有针对性的搜索流量。 关于SEO专业人士应该如何理解&#xff0c;更重要的是&#xff0c;如何利用SEO中的“实体”&#xff0c;存在很多困惑。 我明白这是从哪里来的&#xff0c;尤其是…

BDD - Python Behave 配置文件 behave.ini

BDD - Python Behave 配置文件 behave.ini 引言behave.ini配置参数的类型配置项 behave.ini 应用feature 文件step 文件创建 behave.ini执行 Behave 引言 前面文章 《BDD - Python Behave Runner Script》就是为了每次执行 Behave 时不用手动敲一长串选项&#xff0c;其实还有…

【王爽老师汇编语言】os和计组必备前置知识-学习记录2

1. 应用程序的组成 从汇编语言角度&#xff0c;一个程序分为&#xff1a; 数据段 堆栈段 代码段 扩展段 应用程序从高级语言的角度比如C语言分段&#xff1a; 数据段 代码段 BSS段 栈、堆 我们可以看到一个可执行程序至少包含&#xff1a;代码段数据段BBS段 一般情况下&…

VirtualBox 网络连接配置

这几天为了确认笔记本电脑的ssd磁盘型号&#xff0c;拆开电脑查看了一下&#xff0c;并且拔出来又装回去了&#xff0c;就是这个插拔的动作&#xff0c;导致原本能好好运行的虚拟机&#xff0c;突然启动报错启动不起来了。看了启动日志&#xff0c;显示启动的时候磁盘数据校验出…

Java多线程技术五——单例模式与多线程

1 概述 本章的知识点非常重要。在单例模式与多线程技术相结合的过程中&#xff0c;我们能发现很多以前从未考虑过的问题。这些不良的程序设计如果应用在商业项目中将会带来非常大的麻烦。本章的案例也充分说明&#xff0c;线程与某些技术相结合中&#xff0c;我们要考虑的事情会…