You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin泛型子类非可空参数为何能接收null值?

问题解答

你的疑惑核心在于没注意到泛型参数的实际类型推断结果,具体拆解如下:

  1. 首先看getResultNullable()的返回类型是Result<String?>,这意味着当你返回Result.Success(null)时,Kotlin会自动将Success的泛型参数T推断为String?,而非你默认以为的非空String。
  2. Success类的构造函数参数是T,此时T的实际类型是String?(可空字符串),所以null完全符合这个参数的类型要求,自然不会报错。
  3. 如果你显式指定Success的泛型为非空String,比如写Result.Success<String>(null),这时编译器才会报错——因为null无法赋值给非空的String类型。

简单来说:外层Result<String?>的泛型已经把T限定为可空类型,内层Success的T会继承这个可空性,所以构造函数接收null是合法的,不需要把Success的data声明为T?。

内容的提问来源于stack exchange,提问作者K0cur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:42:04