gpt4 book ai didi

java - 私有(private)字符串属性在反编译的 .java 类 Kotlin 中可以为空

转载 作者:行者123 更新时间:2023-12-01 14:32:20 25 4
gpt4 key购买 nike

当我在 Kotlin 类中有一个私有(private) String 属性并将该类反编译为 Java 代码时,该属性将没有 @NotNull注解。相反,如果我声明一个“公共(public)”字符串属性,它将具有注释 @NotNull在反编译的代码中。

这是一个 .kt 示例:

   class Boo {

private var myString : String = ""
var myOtherString : String = ""

}

和反编译的 .java 等价物:
public final class Boo {
private String myString = "";
@NotNull
private String myOtherString = "";

@NotNull
public final String getMyOtherString() {
return this.myOtherString;
}

public final void setMyOtherString(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
this.myOtherString = var1;
}

}

为什么是 @NotNull私有(private)字符串属性不需要?

最佳答案

反过来想:提供@NotNull 有什么好处?在公共(public)属性(property)上(而不是例如隐藏 @Metadata 中的所有信息)?它对 JVM 运行时没有任何意义;主要的好处是作为类用户及其工具的文档,所以他们知道getMyOtherString从不返回 null。但他们无法访问 myString首先,因此没有必要对其进行注释。

这并不能完全回答为什么该字段 myOtherString被注释,而不仅仅是 getter 和 setter;我猜那是因为它可以通过 @JvmField 暴露出来。 ,因此在某些情况下编写注释它的代码是必要的,并且不检查该字段是否可见稍微方便一些。

关于java - 私有(private)字符串属性在反编译的 .java 类 Kotlin 中可以为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61662316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com