如何在KotlinPoet生成类的方法返回类型?



我需要在KotlinPoet的帮助下生成Builder类。为此,我需要使该方法返回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")找不到Builder类的错误。包是正确的,正如我所理解的问题是,我试图使用类作为返回类型时,它还没有生成。但是我怎样才能解决这个问题呢?

您可以使用其构造函数实例化ClassName,它不必是声明的类:

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

最新更新