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

如何在Kotlin Poet中为参数化类型添加星投影?

在Kotlin Poet中实现星投影参数化类型

不用纠结官方文档没明确说明,Kotlin Poet其实已经支持星投影,核心就是用WildcardTypeName.STAR替代泛型参数。下面是具体实现方案和示例:

  • 生成简单星投影类型(比如List<*>):

    val starListType = ParameterizedTypeName.get(
        List::class.asClassName(),
        WildcardTypeName.STAR
    )
    
  • 生成混合星投影的类型(比如Map<*, String>):

    val mixedMapType = ParameterizedTypeName.get(
        Map::class.asClassName(),
        WildcardTypeName.STAR,
        String::class.asClassName()
    )
    
  • 生成嵌套星投影的类型(比如List<List<*>>):

    val nestedStarType = ParameterizedTypeName.get(
        List::class.asClassName(),
        ParameterizedTypeName.get(List::class.asClassName(), WildcardTypeName.STAR)
    )
    

完整生成代码示例

比如生成一个返回List<*>的函数:

val funSpec = FunSpec.builder("getMixedList")
    .returns(starListType)
    .addStatement("return listOf(1, \"hello\", 3.14)")
    .build()

val fileSpec = FileSpec.builder("com.example", "StarProjectionDemo")
    .addFunction(funSpec)
    .build()

fileSpec.writeTo(System.out)

这段代码会生成如下Kotlin代码:

package com.example

fun getMixedList(): List<*> {
  return listOf(1, "hello", 3.14)
}

本质上,WildcardTypeName.STAR就是Kotlin Poet专门用于表示星投影的类型对象,直接在参数化类型的泛型参数位置传入它就能实现你要的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:01:03