问题标签 [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.
kotlin - 我什么时候应该使用 let {} 什么时候应该使用普通的 != null
您将如何以更 kotlinic 的方式编写以下代码?
我可以使用let,但我觉得它使代码更难理解
android - 智能转换为 kotlin.String
我正在尝试 Kotlin 并从编译器收到消息:
代码:
这是什么意思?
kotlin - 仅当右侧不为空时才分配的更好方法?
在 Kotlin 中,我只想在另一个变量不为空(否则,没有操作)时才进行赋值。我可以想到两种简洁的方法:
然而,考虑到我必须做的频率,它们感觉不够简洁。第一种方法似乎有点矫枉过正。第二种方法是唠叨要求 after 的表达式?:
。
我怀疑一定有更好的方法,比如n =? x
?或者n = x?
?在那儿?
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 的来源。
reflection - 如何获得任何类?Kotlin 中的变量?
我也想让我equals
的班级比较,我写了
不幸的是,它发誓
但我也想和null
s比较。光荣的“零安全”呢?他们为了反思而忘记了它?我没有找到?::
运营商之类的。
kotlin - 在 Kotlin 中该类之外的函数中处理类中字段的空值
这是我拥有的代码的精简版本。在上面的代码中,我编写了一个 main 以便可以复制和执行它。但在实际使用中,我有一个函数,它获取一个“StuffContainer”对象作为参数。
我无法弄清楚如何在该类之外定义的函数中正确处理类中字段的空值。我不能使用 let 表达式,所以我使用的是 if-else 块。
这是最好的方法吗?尽管所有 kotlin 都试图避免由于从某个地方将 vars 设置为 null 而导致的错误,但当在 if 块的 null 检查之后将“container”设置为 null时,此代码将无法正常工作。有没有更好的办法?
android - 科特林!!运算符的使用使代码不清晰
我正在编写一个 Kotlin 应用程序,我一直在研究这种语言,我注意到要创建一个变量,您必须明确定义它是否可以为空,然后使用 ? 操作员。
现在,我的问题。有时我必须定义一个全局变量(在这种情况下为 Fragment),所以我需要将其设为 null,因为我还不能初始化它
在java中我没有这个问题,因为在声明它之后我做的第一件事就是像这样在onCreate()中初始化
然后我可以在没有语法问题的情况下使用它在 Kotlin 中是不同的,因为我必须这样做
现在,每次我调用片段实例时,我都必须使用 null-safe !! 操作员。这使我的代码一团糟,因为对于每一行我至少有一个!运算符,它是否如此频繁看起来真的很不清楚,特别是如果你有 5 个或更多这样的变量。有没有办法简化代码或者这种语言的本质是这样的?
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:
使用代码:
但不是:
kotlin - 为什么在 Kotlin 中调用空值时 toString 不抛出异常?
给定代码
运行时,输出为
出现两个问题:
- 是否可以实现自定义空安全方法并回退到某些默认代码(例如,我认为 toString 可以)
- 为什么不抛出异常?