当前位置: 首页 > news >正文

206-Kotlin 与 Java 互操作

06 Kotlin 与 Java 互操作

这一章解决“在 Java/Kotlin 混合工程里安全互调”。绝大多数 Android 项目都是混合的:依赖库是 Java,老代码是 Java,新代码是 Kotlin。互操作最危险的就是平台类型带来的空陷阱。

1. 为什么要关心互操作

  • Android Framework(ActivityViewContext等)本身是 Java。
  • 大量三方库(OkHttp 之外的旧库、厂商 SDK)是 Java。
  • 老项目迁移过程中,Java 和 Kotlin 长期共存。

Kotlin 设计目标之一就是和 Java 100% 互操作,但“能调通”不等于“没有坑”。最大的坑是空安全在边界处会“漏”。

2. 平台类型与空陷阱(核心)

Java 类型没有可空信息。Kotlin 调到 Java 返回值时,给它一个平台类型,记作T!,意思是“可空性未知”。

// Java: public String getName() { ... } 可能返回 nullvalname=javaUser.name// 类型是 String!(平台类型)vallen=name.length// 编译通过!但运行时若为 null 就 NPE

平台类型的危险在于:Kotlin不强制你判空,于是 Java 的null会绕过空安全直接制造 NPE。这是 Kotlin 项目里 NPE 的两大来源之一(另一个是!!)。

应对原则:在 Java 边界处,显式声明可空性,逼自己处理

valname:String?=javaUser.name// 显式声明可空vallen=name?.length?:0// 安全处理
写法结果
val n = javaUser.name(推断String!不判空,运行时可能 NPE
val n: String = javaUser.name若 Java 返回 null,赋值时立刻 NPE(至少崩在边界)
val n: String? = javaUser.name安全,强制后续处理

3. 用空注解改善推断

如果 Java 代码(或它依赖的库)在方法/参数上加了空注解,Kotlin 会据此推断可空性,平台类型就消失了。

// Javapublic@NullableStringgetName(){...}publicvoidsetName(@NonNullStringname){...
http://www.cnnetsun.cn/news/3022348.html

相关文章:

  • 2026年三维动画行业深度洞察:技术革命、应用版图与创作新范式,谁在领跑全链条数字内容赛道?
  • JSXBIN逆向工程实战:从二进制黑箱到可读代码的完整解析
  • 【蓝桥杯单片机】零基础吃透蜂鸣器
  • BooruDatasetTagManager:如何用多模型融合技术将AI数据集构建效率提升5倍?
  • HS2-HF_Patch终极指南:5分钟让你的Honey Select 2游戏体验焕然一新
  • LangChain 家族生态全解析:从框架到企业级平台的选择指南
  • AI智能体分类及其应用解析(9)
  • JMeter数据库性能测试实战:从连接池配置到结果分析全解析
  • 阿里:GD2PO缓解多奖励冲突
  • 高温工况下,温度变送器为什么总是电路板先挂?
  • 差异分析R包一大堆,到底该用哪个?一篇帮你理清思路
  • Jenkins未授权访问漏洞实战:从Docker复现到纵深防御
  • 构建烹饪国度:从食材管理到风味哲学的完整系统
  • 膜结构看台的张拉工艺复杂吗?
  • B2B工业品平台软件系统哪家好?2026年企业数字化转型优选方案
  • 终极网盘直链下载助手:如何一键解锁九大平台高速免费下载
  • CVE-2025-64446漏洞剖析:FortiWeb身份绕过与路径遍历的复合攻击链
  • 如何5分钟完成Word到LaTeX的智能转换:docx2tex终极指南
  • Laravel Debug模式漏洞深度解析:从PHAR反序列化到RCE利用链
  • 如何用WeChatMsg永久保存你的微信聊天记忆:数据主权时代必备工具
  • AIStarter PanelAI 品牌升级!自研Logo + 动态表情包完整亮相,一步步打磨AI产品
  • 如何让Joy-Con手柄焕然一新:Joy-Con Toolkit终极使用指南
  • HS2-HF Patch终极指南:一键解锁HoneySelect2完整游戏体验 [特殊字符]
  • Video2X 6.0.0完整教程:如何免费实现AI视频放大与帧率提升
  • Python金融数据分析利器:mootdx通达信数据完整使用指南
  • 车载集成最大的好处是不用吊装
  • RobotFramework Web自动化测试环境搭建:Python+Browser Library实战指南
  • 变系数Camassa-Holm方程小色散渐近解:从多重尺度法到尖峰孤子
  • 免费AI视频修复终极指南:三步让模糊视频变高清大片
  • 凸分析视角下的热力学稳定性与相变:密度泛函理论新解