当我在 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/