官术网_书友最值得收藏!

The try... catch block

The Kotlin try... catch block is the equivalent of the Java try... catch block. Let's look at a quick example:

    fun sendFormData(user: User?, data: Data?) { // 1 
        user ?: throw NullPointerException("User cannot be null") 
// 2 data ?: throw NullPointerException("Data cannot be null") //do something } fun onSendDataClicked() { try { // 3 sendFormData(user, data) } catch (e: AssertionError) { // 4 // handle error } finally { // 5 // optional finally block } }
  1. Exceptions are not specified on function signature like in Java.
  2. We check the validity of the data and throw NullPointerException (notice that no new keyword is required when creating an object instance).
  3. The try... catch block is similar construct to Java.
  4. Handle only this specific exception (the AssertionError exception).
  5. The finally block is always executed.

There may be zero or more catch blocks and the finally block may be omitted. However, at least one catch or finally block should be present.

In Kotlin exception handling, try is an expression, so it can return a value and we can assign its value to a variable. The actual assigned value is the last expression of the executed block. Let's check if a particular Android application is installed on the device:

val result = try { // 1 
    context.packageManager.getPackageInfo("com.text.app", 0)  //2 
    true 
} catch (ex: PackageManager.NameNotFoundException) { // 3 
    false 
} 
  1. The try... catch block is returning value that was returned by a single expression function.
  2. If an application is installed, the getPackageInfo method will return a value (this value is ignored) and the next line containing the true expression will be executed. This is the last operation performed by a try block, so its value will be assigned to a variable (true).

If an app is not installed, getPackageInfo will throw PackageManager.NameNotFoundException and the catch block will be executed. The last line of the catch block contains a false expression, so its value will be assigned to a variable.

主站蜘蛛池模板: 乐平市| 团风县| 岚皋县| 同仁县| 长垣县| 五家渠市| 益阳市| 磴口县| 秭归县| 尼玛县| 巫山县| 广南县| 晋州市| 六安市| 凤山县| 屏东县| 鸡泽县| 铁岭县| 铜梁县| 那坡县| 高要市| 开江县| 蓬溪县| 莱西市| 大邑县| 从江县| 巫山县| 科技| 略阳县| 同仁县| 日照市| 云霄县| 厦门市| 泗洪县| 河北省| 丰原市| 镇安县| 栖霞市| 沁阳市| 彰化市| 乌拉特后旗|