Kotlin异常与Java异常的区别及注解详解

时间:2021-07-11 12:10:23

Kotlin异常与Java异常的区别:

throw的Kotlin中是个表达式,这样我们可以将throw作为Elvis表达式【val test = aa ?: bb,这样的则为Elvis表达式,表示如果?前面的不为null则将前面的aa赋值给test,否则则执行?后面的赋值test】的一部分,下面看下代码:

Kotlin异常与Java异常的区别及注解详解

呃,有个东东比较奇怪:

Kotlin异常与Java异常的区别及注解详解

这里要解释一下:throw表达式的类型是一种特殊的类型:Nothing。在自己的代码中,可以使用Nothing来标记永远不会返回的函数。好下面来把程序执行一下:

Kotlin异常与Java异常的区别及注解详解

比如好理解,接下来咱们将str的值置为null再看下:

Kotlin异常与Java异常的区别及注解详解

好,还是将str的值还原,继续修改程序:

Kotlin异常与Java异常的区别及注解详解

而如果咱们将置为null,则结果也可想而知,肯定抛异常了:

Kotlin异常与Java异常的区别及注解详解

下面来瞅一下Nothing的定义:

Kotlin异常与Java异常的区别及注解详解

关于Nothing,它还可以这样用“Nothing?”,由于Nothing是代表一个永远都不会返回值,而?表示它可以为null,所以很明显"Nothing?"可以说明是null的一种类型,下面可以验证一下:

Kotlin异常与Java异常的区别及注解详解

那,下面再来看:

Kotlin异常与Java异常的区别及注解详解

此时它又是啥类型呢?其实是:

Kotlin异常与Java异常的区别及注解详解

注解(annotation):

在Kotlin中也是存有注解的,那下面看一下如何来创建一个注解:

Kotlin异常与Java异常的区别及注解详解

Kotlin异常与Java异常的区别及注解详解

而我们可以利用meta-annotation(元注解)来给注解增加额外的元数据,下面看几个重要的元注解:

1、@Target:其实跟Java注解类似,用来标识该注解是要写在哪个地方。

Kotlin异常与Java异常的区别及注解详解

2、@Retention: 保持策略,也就是该注解是在代码中出现,还是运行时上面,还是说在字节码上面:

Kotlin异常与Java异常的区别及注解详解

接下来咱们来使用一下咱们定义的注解:

Kotlin异常与Java异常的区别及注解详解

我们知道在Kotlin中有primary constructor和secondary constructor,其中在主构造函数时我们定义时可以这样:

Kotlin异常与Java异常的区别及注解详解

其实主构造方法是可以有此关键字的:

Kotlin异常与Java异常的区别及注解详解

而如果想给我们的主构造方法加上注解,此关键字就不能省了,如下:

Kotlin异常与Java异常的区别及注解详解

如果省掉则会报错:

Kotlin异常与Java异常的区别及注解详解

其中也可以给属性的getter和setter增加注解,如下:

Kotlin异常与Java异常的区别及注解详解