问题标签 [kotlin-null-safety]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1024 浏览

kotlin - 我什么时候应该使用 let {} 什么时候应该使用普通的 != null

您将如何以更 kotlinic 的方式编写以下代码?

我可以使用let,但我觉得它使代码更难理解

0 投票
2 回答
2411 浏览

android - Kotlin Null 安全警告 Unexpected tokens(使用 ; 在同一行分隔表达式)

我在我的应用程序中尝试使用 Kotlin 代码中的Elvis 运算符并收到以下警告:

代码:

任何想法如何解决这个问题?

0 投票
2 回答
4354 浏览

android - 智能转换为 kotlin.String

我正在尝试 Kotlin 并从编译器收到消息:

代码:

这是什么意思?

0 投票
2 回答
391 浏览

kotlin - 仅当右侧不为空时才分配的更好方法?

在 Kotlin 中,我只想在另一个变量不为空(否则,没有操作)时才进行赋值。我可以想到两种简洁的方法:

然而,考虑到我必须做的频率,它们感觉不够简洁。第一种方法似乎有点矫枉过正。第二种方法是唠叨要求 after 的表达式?:

我怀疑一定有更好的方法,比如n =? x?或者n = x??在那儿?

0 投票
1 回答
282 浏览

java - 我需要关于 Java 中的 null 安全性的建议

我一直在阅读有关在 java 中实现 null 安全的文章,以及作为参数return null传递的 . null我知道它简化了生活,而且人们并不总是阅读文档,所以他们不知道方法是否可以传递给它return null,或者是否null可以传递给它。注解似乎只是污染了代码,并且没有类似 Kotlin 的null 安全机制。在我当前的项目中,我尝试以这样的方式设计所有东西,null 几乎是不必要的,至少对于最终用户来说是这样。

我想创建一个更改侦听器(类似于javafx.beans.value.ChangeListener),这样我就可以将以前的值和当前值传递给该changed()方法。问题是,我希望它是空安全的,所以我不想将 anull作为参数传递,即使它可以从无值变为某个值,或从某个值变为无值。我可以为这种情况添加两种额外的方法,并有类似的东西:

不过,这种做法似乎有些过分。我也可以 java.util.Optional<T>用作参数,但这会增加额外的拳击:

有没有更优雅的选择?或者我应该强迫用户使用某种空对象模式?尽管这会产生需要扩展某些类的问题。我也可以停止关心,在文档中指定如果使用会发生什么null,并让用户找到所有 NullPointerExceptions 的来源。

0 投票
1 回答
1841 浏览

reflection - 如何获得任何类?Kotlin 中的变量?

我也想让我equals的班级比较,我写了

不幸的是,它发誓

但我也想和nulls比较。光荣的“零安全”呢?他们为了反思而忘记了它?我没有找到?::运营商之类的。

0 投票
1 回答
91 浏览

kotlin - 在 Kotlin 中该类之外的函数中处理类中字段的空值

这是我拥有的代码的精简版本。在上面的代码中,我编写了一个 main 以便可以复制和执行它。但在实际使用中,我有一个函数,它获取一个“StuffContainer”对象作为参数。

我无法弄清楚如何在该类之外定义的函数中正确处理类中字段的空值。我不能使用 let 表达式,所以我使用的是 if-else 块。

这是最好的方法吗?尽管所有 kotlin 都试图避免由于从某个地方将 vars 设置为 null 而导致的错误,但当在 if 块的 null 检查之后将“container”设置为 null时,此代码将无法正常工作。有没有更好的办法?

0 投票
1 回答
126 浏览

android - 科特林!!运算符的使用使代码不清晰

我正在编写一个 Kotlin 应用程序,我一直在研究这种语言,我注意到要创建一个变量,您必须明确定义它是否可以为空,然后使用 ? 操作员。

现在,我的问题。有时我必须定义一个全局变量(在这种情况下为 Fragment),所以我需要将其设为 null,因为我还不能初始化它

在java中我没有这个问题,因为在声明它之后我做的第一件事就是像这样在onCreate()中初始化

然后我可以在没有语法问题的情况下使用它在 Kotlin 中是不同的,因为我必须这样做

现在,每次我调用片段实例时,我都必须使用 null-safe !! 操作员。这使我的代码一团糟,因为对于每一行我至少有一个!运算符,它是否如此频繁看起来真的很不清楚,特别是如果你有 5 个或更多这样的变量。有没有办法简化代码或者这种语言的本质是这样的?

0 投票
2 回答
375 浏览

android - Kotlin 中带有 ?.let{} 块的 NoClassDefFoundError

我无法弄清楚为什么会出现以下错误:

E/UncaughtException: java.lang.NoClassDefFoundError: 解析失败:Lcom/somecompany/someapp/common/glide/GlideWrapper$loadCircularProfileImg$1$1; 在 com.somecompany.someapp.common.glide.GlideWrapper.loadCircularProfileImg(GlideWrapper.kt:31) 在 com.somecompany.someapp.main.MainActivity.showSideBarProfPhoto(MainActivity.kt:179) 在 com.somecompany.someapp.main.MainActivity .onCreate(MainActivity.kt:115) 在 android.app.Activity.performCreate(Activity.java:

使用代码:

但不是:

0 投票
1 回答
787 浏览

kotlin - 为什么在 Kotlin 中调用空值时 toString 不抛出异常?

给定代码

运行时,输出为

出现两个问题:

  • 是否可以实现自定义空安全方法并回退到某些默认代码(例如,我认为 toString 可以)
  • 为什么不抛出异常?