简体   繁体   English

Android-如何使用Kotlin Poet库生成类型安全的生成器函数

[英]Android - How to generate type safe builder function using Kotlin Poet library

I am trying to generate one kotlin class using kotlin poet library which should have one function and one inner static class as given below. 我正在尝试使用kotlin诗人库生成一个kotlin类,该库应具有一个功能和一个内部静态类,如下所示。

class SampleClass{

        class TestClass{
            lateinit var id: String
            lateinit var name: String
        }

        fun function1(init: TestClass.() -> Unit) {
            val trackPhoneNumberClicked = TestClass().apply(init)

            val event = Event.Builder.from(testData.getTestDataById("testdataid")!!)
                    .apply {
                        addProperty("id", trackPhoneNumberClicked.id)
                        addProperty("name", trackPhoneNumberClicked.name)
                    }
                    .build()
        }
    }

I can generate SampleClass and inner class TestClass but I am not able to create function1 with this argument and body. 我可以生成SampleClass和内部类TestClass,但是无法使用此参数和主体创建function1。

github like of kotlin poet library. github之类的kotlin诗人库。 https://github.com/square/kotlinpoet https://github.com/square/kotlinpoet

Can anyone provide any solution for this? 谁能为此提供任何解决方案?

I got the answer that how we can generate function1(init: TestClass.() -> Unit) this type of argument in function. 我得到的答案是,如何在function1(init: TestClass.() -> Unit)中生成function1(init: TestClass.() -> Unit)这种类型的参数。 We need to use LambdaTypeName class of kotlin poet lib. 我们需要使用Kotlin诗人lib的LambdaTypeName类。

val buildParameter = ParameterSpec.builder(FUNCTION_PARAMETER_NAME, LambdaTypeName.get(ClassName("", CLASS_TYPE_NAME), returnType = Unit::class.asTypeName())).build() val buildParameter = ParameterSpec.builder(FUNCTION_PARAMETER_NAME,LambdaTypeName.get(ClassName(“”,CLASS_TYPE_NAME),returnType = Unit :: class.asTypeName()))。build()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM