[英]Kotlin noarg plugin: Constructor only accessible by java reflection
[英]Kotlin noarg plugin not initializing default values
你好我有以下代码(jdk)
构建.gradle.kts
plugins {
kotlin("jvm") version "1.7.10"
id("org.jetbrains.kotlin.plugin.noarg") version "1.7.10"
application
}
noArg {
annotation("com.MyAnnotation")
}
类和注解
annotation class MyAnnotation
@MyAnnotation
class A(
var a: String = java.util.UUID.randomUUID().toString()
)
@MyAnnotation
class Ab (
var a: String = java.util.UUID.randomUUID().toString(),
var b: String
)
当我在没有参数的情况下通过 Java 初始化A和Ab类时
new A() and new Ab()
在类A中,字段a被初始化,但在类Ab中,它不是 A 和 Ab 的反编译构造函数
public A() {
this(null, 1, null);
}
public Ab() {}
但是当我使用属性而不是构造函数时
@MyAnnotation
class A {
var a: String = java.util.UUID.randomUUID().toString()
}
@MyAnnotation
class Ab {
var a: String = java.util.UUID.randomUUID().toString()
lateinit var b: String
}
一切正常,反编译的构造函数是
public A() {
Intrinsics.checkNotNullExpressionValue(UUID.randomUUID().toString(), "randomUUID().toString()");
this.a = UUID.randomUUID().toString();
}
public Ab() {
Intrinsics.checkNotNullExpressionValue(UUID.randomUUID().toString(), "randomUUID().toString()");
this.a = UUID.randomUUID().toString();
}
我做错了什么或者这是 Kotlin 的问题?
此问题类似于No-Arg 插件导致延迟委托未初始化并抛出 NullPointerException 。 根据那里的答案,您只需要在 build.gradle.kts 中添加一行:
noArg {
annotation("com.MyAnnotation")
invokeInitializers = true
}
可以在 Kotlin 网页上找到其他信息: https ://kotlinlang.org/docs/no-arg-plugin.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.