Kotlin - 异常

抛出异常、捕获处理、自定义异常

和Java中一样。

main {
    val num: Int? = null
    try {
        num !!.plus(1)
    } catch(e: Exception) {
        println(e)
    }
}

fun check(num: Int?) {
    num ?: throw MyException()    //抛异常
    checkNotNull(num) {"值为空"}    //使用先决条件函数
}

class MyException() : Exception()    //自定义异常

先决条件函数

条件必须满足,目标代码才会执行。使用这些内置函数可以抛出带自定义信息的异常。

checkNotNull如果参数为null,抛出IllegalStateException,否则返回非null值。
require如果参数为false,抛出IllegalArgumentException。
requireNotNull如果参数为null,抛出IllegalStateException,否则返回非null值。
error如果参数为null,抛出IllegalStateException并输出错误信息,否则返回非null值。
assert如果参数为false,抛出AssertError,并打上断言编译器标记。
### 3.1 问题分析 用户在构建 Android 项目时遇到两个关键问题: - **废弃的 `kotlin-android-extensions` 插件警告**:该插件已被弃用,提示应迁移到 View Binding 和 `kotlin-parcelize` 插件 [^3]。 - **KaptTask 缺失错误**:这通常与 Kotlin 注解处理任务配置缺失有关,尤其是在使用数据绑定(Data Binding)或 Room 等依赖注解处理器的库时 [^4]。 这些问题可能由以下原因引起: - 项目仍在使用 `kotlin-android-extensions` 插件,而该插件已不再支持现代 Kotlin Gradle 插件。 - 未正确配置 `kotlin-kapt` 插件,导致注解处理器无法生成代码。 - 项目未启用 Data Binding 或 View Binding,导致编译阶段无法生成绑定类。 ### 3.2 解决方案 #### 3.2.1 迁移至 `kotlin-parcelize` 和 View Binding 应移除 `kotlin-android-extensions` 插件,并在 `build.gradle` 文件中启用 `kotlin-parcelize` 插件以支持 Parcelable 序列化: ```gradle plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'org.jetbrains.kotlin.plugin.parcelize' // 启用 parcelize 插件 } ``` 同时,启用 View Binding 以替代旧的 Kotlin Android Extensions 的视图查找机制: ```gradle android { ... buildFeatures { viewBinding true } } ``` 在 Activity 或 Fragment 中使用 View Binding 示例: ```kotlin private lateinit var binding: ResultProfileBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ResultProfileBinding.inflate(layoutInflater) setContentView(binding.root) } ``` 此方式提高了类型安全并避免了运行时异常 [^4]。 #### 3.2.2 配置 `kotlin-kapt` 插件以修复 KaptTask 缺失问题 若项目中使用了 Room、Dagger 或 Data Binding 等依赖注解处理器的库,必须在 `build.gradle` 中启用 `kotlin-kapt` 插件: ```gradle plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'org.jetbrains.kotlin.kapt' // 启用 kapt 插件 } ``` 确保在依赖项中正确声明注解处理器,例如 Room 编译器: ```gradle dependencies { implementation "androidx.room:room-runtime:2.5.2" kapt "androidx.room:room-compiler:2.5.2" } ``` 此配置确保注解处理器在编译阶段正确运行并生成所需代码 [^4]。 #### 3.2.3 清理 Gradle 缓存并重新构建项目 执行以下命令清理构建缓存并重新构建项目: ```bash ./gradlew clean ./gradlew build ``` 若使用 Flutter 项目嵌套 Android 模块,可执行: ```bash flutter clean cd android ./gradlew clean cd .. flutter pub get flutter build ``` 此操作可清除因插件变更导致的缓存残留问题 [^1]。 ### 3.3 配置建议 在 `gradle.properties` 中添加以下配置以优化 Kotlin 编译行为: ```properties kotlin.incremental=true kotlin.metadata.version=1.9.0 org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 android.useAndroidX=true android.enableJetifier=true ``` 这些配置有助于提升构建性能并避免元数据版本不兼容问题 [^1]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值