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,运行异样就返回 100
Log.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 , 否则失常返回