⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

编译器合约:用 Contract DSL 告诉编译器“我不会返回 null”

通过 Kotlin 的 contract 实验性功能,创建自定义智能函数契约来改进空安全分析。 · 难度:入门 · +10XP

编译器合约:用 Contract DSL 告诉编译器“我不会返回 null”

Kotlin 的 Contract 是作用于函数声明的 DSL,允许开发者向编译器声明函数调用的副作用或返回值关系。最常见的用途是帮助智能类型转换:例如标准库的 require() 使用了 contract 告知编译器如果返回则参数非空。本教程将手把手创建一个自定义断言函数,使其在 if 判断后自动进行非空缩小,并解释 contract 的三种主要类型:returns、returnsNotNull、callsInPlace。

import kotlin.contracts.*

fun String?.isNotNull(): Boolean { contract { returns(true) implies (this@isNotNull != null) } return this != null }

fun main() { val name: String? = "Kotlin" if (name.isNotNull()) { // 如果没有 contract,这里 name 仍被视作可空 println(name.length) // 智能类型转换生效 } }

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 92 篇
0 完成
🔥 0