我正在我的一个项目中编写一个gradle任务,这个任务需要编写一个kotlin文件。
def fileSpec = FileSpec.builder(packageName.toLowerCase(), "ModelClass")
.addType(
TypeSpec.classBuilder("Model")
.primaryConstructor(
FunSpec.constructorBuilder()
.addParameter("name",String.class )
.build()
)
.addProperty(
PropertySpec.builder("name", String.class)
.initializer("name")
.build()
)
.build()
)
.build()
def kotlinFile = new File(dir, "ModelClass.kt")
kotlinFile.withWriter('UTF-8') {
writer ->
fileSpec.writeTo(writer)
}
任务完成,没有任何错误,但生成的类代码缺少 kotlin 类型。
import java.lang.String
public class Model(
public val name: String,
)
生成的类从 java.lang 导入 String,而不是 Kotlin Std Lib。我的 gradle 任务是用 groovy 编写的(我必须选择 groovy,因为我的 IDE 总是在自定义 gradle.kts 文件中抱怨“代码洞察不可用”)。我想,我们无法从非 kotlin 文件生成 kotlin 文件,或者可以吗?
kotlin.String
在运行时并不真正存在,它会编译为java.lang.String
,因此当您尝试使用反射访问其类型(即String::class
)时,您会得到java.lang.String
。
STRING
属性。如果您愿意,您还可以创建自己的 ClassName
:ClassName("kotlin", "String")
。