Throws Exception
Kotlin 的异样和 Java 的一样, try…catch…finally代码块解决异样,惟一一点不同是:Kotlin 的异样都是 Unchecked exceptions。

checked exceptions 是必须在办法上定义并且解决的异样,比方 Java 的 IoException。

Kotlin 抛出异样是应用 Throws 注解来实现的,如下:

@Throws(IOException::class)fun createDirectory(file: File) {    if (file.exists())        throw IOException("Directory already exists")    file.createNewFile()}

当咱们在java代码中应用的时候,如下:

会揭示咱们报错,然而如果在 kotlin 文件里应用的时候,就不会有提醒。

自定义异样

/** * @author : zhaoyanjun * @time : 2021/7/5 * @desc : 自定义异样 */class CommonException(code: Int, message: String) : Exception(message)

应用:

@Throws(CommonException::class)fun createDirectory(file: File) {    if (file.exists())        throw CommonException(0, "file is exists")    file.createNewFile()}

runCatching

class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        kotlin.runCatching {            sum(2, 4)        }.onSuccess {            Log.d("yy--", "后果失常$it")        }.onFailure {            it.printStackTrace()            Log.d("yy--", "后果异样${it.message}")        }    }    fun sum(num1: Int, num2: Int): Int {        1 / 0        return num1 + num2    }}

getOrDefault

val result = kotlin.runCatching {            sum(2, 4)        }.onSuccess {            Log.d("yy--", "后果失常$it")        }.onFailure {            it.printStackTrace()            Log.d("yy--", "后果异样${it.message}")        }.getOrDefault(100)//如果运行失常,就返回6,运行异样就返回100Log.d("yy--", "后果$result")

isSuccess、isFailure

val result = kotlin.runCatching {            sum(2, 4)        }.onSuccess {            Log.d("yy--", "后果失常$it")        }.onFailure {            it.printStackTrace()            Log.d("yy--", "后果异样${it.message}")        }.isFailure

exceptionOrNull

    public fun exceptionOrNull(): Throwable? =        when (value) {            is Failure -> value.exception            else -> null        }

如果有异样就返回异样,否则返回 Null

getOrNull

    @InlineOnly    public inline fun getOrNull(): T? =        when {            isFailure -> null            else -> value as T        }````如果失败了,就返回null ,否则失常返回