#kotlinpoet
Вопрос:
Мне нужно создать Builder
класс с помощью KotlinPoet
. Для этой цели мне нужно, чтобы метод возвращал 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
. Пакет правильный, и, как я понимаю, проблема в том, что я пытаюсь использовать класс в качестве возвращаемого типа, когда он еще не создан. Но как я могу решить эту проблему?
Ответ №1:
Вы можете просто создать экземпляр a ClassName
с помощью его конструктора, он не обязательно должен быть объявленным классом:
private fun generateInitBuilderEndpointSetter() = FunSpec.builder("setEndpoint")
.addParameter("endpoint", ClassName("android.net", "Uri"))
.returns(ClassName("com.idfinance.userbehavior.utils", "Init", "Builder"))
.build()