我需要在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的错误。这个包是正确的,据我所知,问题是我试图在类还没有生成的时候使用它作为返回类型。但是我该如何解决这个问题呢?
发布于 2021-07-28 22:13:59
你可以只使用ClassName的constructor来实例化它,它不一定是一个声明的类:
private fun generateInitBuilderEndpointSetter() = FunSpec.builder("setEndpoint")
.addParameter("endpoint", ClassName("android.net", "Uri"))
.returns(ClassName("com.idfinance.userbehavior.utils", "Init", "Builder"))
.build()https://stackoverflow.com/questions/68549144
复制相似问题