使用 KotlinPoet,为了生成用于向类和构造函数添加属性的 PropertySpec,您需要一个 TypeName 对象。
TypeMirror.asTypeName() KotlinPoet 函数已弃用,因为它并不总是对 Kotlin 类型正确工作。
但我找不到一个关于如何使用 kotlinpoet-metadata API 获取 Kotlin 类(例如 kotlin.String)的正确 TypeName 的示例,正如弃用消息所述的那样。
kotlinpoet-metadata API 的文档似乎也完全损坏(转到https://square.github.io/kotlinpoet/interop-kotlinx-metadata/#interop-with-kotlinx-metadata并单击 API 部分下的任何内容)
有谁有如何用一些 kotlinpoet-metadata 代码替换 TypeMirror.asTypeName() 来获取 TypeName 的示例,以便我可以创建 PropertySpec?
我是 kotlinpoet 的新手,我一直在阅读文档,它似乎是一个很棒的库,但我找不到解决我的问题的示例。
我有一个依赖项lib-domain-0.1.jar,其中有业务对象,例如:
package pe.com.business.domain
data class Person(val id: Int? = null, val name: String? = null)
...
..
package pe.com.business.domain
data class Departament(val id: Int? = null, val direction: String? = null)
...
..
.
Run Code Online (Sandbox Code Playgroud)
我想构建一个新的依赖项,lib-domain-fx-0-1.jar它具有相同的域,但具有 JavaFx 属性(使用 Tornadofx),例如:
package pe.com.business.domainfx
import tornadofx.*
class Person {
val idProperty = SimpleIntegerProperty()
var id by idProperty
val nameProperty = SimpleStringProperty()
var name by nameProperty
}
...
..
package pe.com.business.domainfx
import tornadofx.*
class Departament {
val idProperty …Run Code Online (Sandbox Code Playgroud) 有什么方法可以省略public通过 KotlinPoetTypeSpec.Builder和PropertySpec.Builder分别生成的类型和属性中的冗余修饰符吗?
在Kotlin中,当声明为类型获取KClass时,例如String :: class(表示其类型为String的值),是否有一种语法来指示该值可以为空(即表示String?值而不是String) .
上下文是我正在尝试使用KotlinPoet生成Kotlin类,但我创建的所有属性(使用PropertySpec.builder)都不可为空(例如String,当我真正想要的是String?)时.
谢谢你的帮助.
我想用KotlinPoet生成简单的数据类:
data class User(val id: Int)
Run Code Online (Sandbox Code Playgroud)
我这样做:
val builder = KotlinFile.builder("", "Foo")
val classBuilder = TypeSpec.classBuilder("User").addModifiers(KModifier.DATA)
val ctor = FunSpec.constructorBuilder()
ctor.addParameter("id", Int::class)
classBuilder.primaryConstructor(ctor.build())
builder.addType(classBuilder.build())
builder.build().writeTo(System.out)
Run Code Online (Sandbox Code Playgroud)
但是我得到的是:
data class User(id: Int) {
}
Run Code Online (Sandbox Code Playgroud)
如何val在构造函数参数中添加修饰符?
我想生成一个kotlin类定义,这个类实现了一个自定义接口,目标类定义如下:
data class TemplateState(val data: String) : ContractState {
}
Run Code Online (Sandbox Code Playgroud)
除了界面部分,我使用下面的诗人代码生成它,有人可以帮忙吗?
val file = FileSpec.builder("com.template", "StatesAndContracts")
.addType(TypeSpec.classBuilder("TemplateState")
.addModifiers(KModifier.DATA)
.primaryConstructor(FunSpec.constructorBuilder()
.addParameter("data", String::class)
.build())
.addProperty(PropertySpec.builder("data", String::class)
.initializer("data")
.build())
.build())
.build()
Run Code Online (Sandbox Code Playgroud) 我想生成这样的代码:
class B private constructor() : A {
companion object {
val instance: B by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
B()
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用 KotlinPoet:
private fun genCompanionObject() = TypeSpec.companionObjectBuilder()
.addProperty(PropertySpec.builder("instance", A::class.java).build()).build()
Run Code Online (Sandbox Code Playgroud)
如何生成by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED)?我在文档中找不到一些有用的API 。
给定一个像
interface Builder<R> {
fun build() : R
}
Run Code Online (Sandbox Code Playgroud)
如何生成一个BooBuilder使用kotlinpoet实现此接口的类。
我在文档中找不到创建通用接口(或类)的示例。
我想从什么开始
class BooBuilder(): Builder<Boo> { //...
Run Code Online (Sandbox Code Playgroud)
我明白我应该从
TypeSpec
.classBuilder("BooBuilder")
.addSuperinterface( /* I have no idea what to put here */ )
// add methods
Run Code Online (Sandbox Code Playgroud) 我使用以下代码使用 KotlinPoet 生成接口
val funspec = FunSpec.builder("test").build()
val interfacespec = TypeSpec.interfaceBuilder("Test").addFunction(funspec).build()
Run Code Online (Sandbox Code Playgroud)
这会生成以下代码:
interface Test {
fun test() {
}
}
Run Code Online (Sandbox Code Playgroud)
该函数test()有一个默认实现(有括号)。有没有办法删除默认实现(删除括号)?
我正在使用 KotlinPoet 进行注释处理,但遇到了问题。我需要在生成的类中返回函数,但我不确定 KotlinPoet 可以做到吗?如果您有一些经验,请帮助我。
我能做的:
fun test(): String = ...
Run Code Online (Sandbox Code Playgroud)
我需要做的
fun test(): () -> String = ...
Run Code Online (Sandbox Code Playgroud)