init 初始化块中无法 return?

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

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

3.2k
Kotlin的继承
Kotlin

Kotlin的继承

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

2.7k
Kotlin循环语句
Kotlin

Kotlin循环语句

Kotlin循环语句每门语言都要学一下循环语句,虽然每种语言都有for、while等循环,但总有些各自的特色。1、for循环for循环遍历集合或者数组,使用 in 关键字遍历任何提供迭代器。语法:例:先定义一个数组或集合array:遍历集合array:通常还需要用到索引index,调用集合的withIndex()方法参与循环遍历。例:使用下面的方式遍历for循环,同时获取元素当前索引index和当

2.5k