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

标签 java android kotlin

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

相关文章:

android - 使用Picasso加载图片时出现错误504

java - 这个算法可以找到一个系列的无穷大之和吗?

java - 为什么 getPreferredSize() 返回的大小对于此 JDialog 来说太小?

java - 任务 ':app:compileDebugJavaWithJavac' 执行失败。在运行 React Native 项目时

android - ListView - 每个项目都有一个 ID?

java - Python 客户端不接收来自 Spring websocket 服务器的消息

kotlin - 此表达式将在后续版本中解析为 Int。请添加明确的约定调用

java - 这是一个什么样的构造函数,以 <T extends Drawable & DrawerToggle> 开头?

java - 如何使 logging.properties 和 commons-logging.properties 属性文件工作?

android - 在 android 中设置 imageview 位图时的奇怪行为