繁体   English   中英

Kotlin noarg 插件未初始化默认值

[英]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 初始化AAb类时

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.

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