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

Kotlin中@Deprecated的ReplaceWith泛型场景失效问题求助

解决方案

要正确配置@Deprecated注解的ReplaceWith参数,适配inline reified泛型函数的替换场景,你需要利用ReplaceWith的typeArguments参数显式指定泛型参数的映射关系,让IDE自动替换时生成正确的泛型声明。

正确的注解配置

修改old函数的废弃注解如下:

@Deprecated(
    message = "请使用new<T>()替代",
    replaceWith = ReplaceWith(
        expression = "new()",
        typeArguments = ["T"]
    )
)
fun <T> old(clazz: Class<T>): T {
    TODO()
}

原理说明

  • expression = "new()" 指定了替换的目标函数调用,由于new是inline reified泛型函数,原本可省略泛型声明,但我们需要通过typeArguments强制IDE添加正确的泛型参数。
  • typeArguments = ["T"] 表示将原函数的泛型参数T映射到新函数的泛型参数位置,IDE自动替换时会把T替换为实际类型(比如String),最终生成new<String>()这类正确调用,既不会缺失泛型声明,也不会产生多余字符。

验证效果

对val foo = old(String::class.java)执行自动修正后,IDE会生成正确代码:

val foo = new<String>()

该写法符合Kotlin语法规则,能让编译器正确推断类型,避免编译错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:45:35