init 初始化块中无法 return?

QuibblerQuibbler 2023-06-06 约 2 分钟 1724 次阅读

init 初始化块中无法 return?

在 Kotlin 类中 , 可以定义 init 初始化块 , 在其中可以为 变量赋值 , 执行一些检查相关的代码 , 该 init 初始化块在 创建类实例对象 时执行 。


调用顺序为:主构造函数 -> init -> 次构造函数。而且允许定义多个 init 初始化块,它们将按顺序执行。


最近用Kotlin写代码的时候才发现,在init 初始化块中不能直接return:


刚发现的时候有点疑惑,但仔细一想,这样规定也有些道理。Kotlin允许定义多个 init 初始化块,如果在某一个中return返回了,那么后面还该不该继续执行呢?


用Koltin写一段demo代码,编译成class。


用jd-gui查看class文件,可以发现,Kotlin在编译过程中,将init 初始化块按顺序“合成”到主构造函数中。很明显可以看到调用顺序:主构造函数 -> init -> 次构造函数。


正因为如此,干脆就不允许在 init 初始化块中直接return。但也不是不能“出现”return,可以这样写,在lambda表达式中return:


只是不允许在 init 初始化块中直接return,在构造函数中还是可以根据需要return的。

相关推荐

Parcelize:Parcelable 实现生成器
Kotlin

Parcelize:Parcelable 实现生成器

Parcelize:Parcelable 实现生成器Parcelable是安卓开发中常用的序列化方式,之前分享过一个Parcelable序列化插件,方便开发者快速生成代码,提高开发效率。1、Parcelize插件Kotlin官方也推出一个Parcelable自动生成的Gradle插件:Parcelize。1.1、引入插件在项目的build.gradle中添加:id("kotlin-parceliz

2.6k
Kotlin的继承
Kotlin

Kotlin的继承

Kotlin的继承1、超类:Any类似于Java中的Object类,Kotlin也有一个叫Any的超类,是所有类的父类,所有类都默认继承自该类。超类的定义如下,其中定义了三个函数:2、open注意上面的Any类用open修饰,表示该类可以被继承。Kotlin中的类默认都是final的,无法被继承:如果想让类可以被继承,就需要用在定义类的地方用open关键字标识该类可以被继承。3、构造器继承中涉及到

2.1k
 Kotlin基本语法
Kotlin

Kotlin基本语法

Kotlin基本语法了解Kotlin语言的基本语法。1、包kotlin文件以.kt结尾,编译文件还是如此只不过在文件名后面加上Kt后缀。这一点和Java不同,Java源文件.java,编译后为.class文件。1.1、包定义每个kotlin文件的第一行就用关键字package定义该文件所在的包。例:1.2、导包用到其它kotlin文件需要使用关键字import导入,这一点和Java一样。kotli

2.1k