如何在 KotlinPoet 中生成方法 return 类型的生成 class?

How to make method return type of generated class in KotlinPoet?

我需要在 KotlinPoet 的帮助下生成 Builder class。为此,我需要将方法 return 设为 Builder 类型。我通过以下方式进行:

    private fun generateInitUserBehaviorClass() = TypeSpec.classBuilder("Init")
    .addType(generateInitBuilderClass())
    .build()

private fun generateInitBuilderClass() = TypeSpec.classBuilder("Builder")
    .addProperty(generateInitBuilderEndpointProperty())
    .addFunction(generateInitBuilderEndpointSetter())
    .build()

private fun generateInitBuilderEndpointProperty() = PropertySpec.builder(
    "endpoint",
    Class.forName("android.net.Uri").asTypeName().copy(nullable = true),
    KModifier.PRIVATE
).mutable(true)
    .initializer("null")
    .build()

private fun generateInitBuilderEndpointSetter() = FunSpec.builder("setEndpoint")
    .addParameter("endpoint", Class.forName("android.net.Uri"))
    .returns(Class.forName("com.idfinance.userbehavior.utils.Init.Builder"))
    .build()

但是当我构建模块时,我发现 Class.forName("com.idfinance.userbehavior.utils.Init.Builder") 找不到 class Builder 的错误。该包是正确的,据我所知,问题是我在 class 尚未生成时尝试将其用作 return 类型。但是我该如何解决这个问题呢?

您可以使用其 constructor 实例化一个 ClassName,它不必是已声明的 class:

private fun generateInitBuilderEndpointSetter() = FunSpec.builder("setEndpoint")
    .addParameter("endpoint", ClassName("android.net", "Uri"))
    .returns(ClassName("com.idfinance.userbehavior.utils", "Init", "Builder"))
    .build()