问题标签 [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 投票
7 回答
26840 浏览

spring - 如何在 kotlin 中将 @Autowired 或 @Value 等弹簧注释用于原始类型?

使用弹簧注释自动装配非基元,例如

作品。

但这不起作用:

有一个错误:

原始类型不允许使用 lateinit 修饰符。

如何将原始属性自动装配到 kotlin 类中?

0 投票
2 回答
1738 浏览

reflection - 如何使用 Kotlin 中的默认构造函数参数值实例化对象?

我有具有默认值的数据类。

当某些值为空时,Java 反射无法实例化类。我得到了例外

这是因为java.lang.reflect.Constructor<T>.instantiateClass方法需要不为空的参数。

我有类型信息,我有构造函数定义,但我不确定如何调用构造函数以便它使用默认值(这些值来自数据库并且categories可以是null)。有没有办法在 Kotlin 中实现这一点?

0 投票
1 回答
1086 浏览

arrays - 有没有办法从一个范围创建一个非空数组?

在 Java 中,可以使用传统的 for 循环创建一个简单的数组:

对 Kotlin 的简单转换会产生以下结果:

问题是现在数组中的每个元素都是可选的;这使我的代码充满了?运算符。

有没有办法以类似的方式创建一个数组,但没有可选类型?

0 投票
3 回答
3759 浏览

kotlin - Kotlin:不能一次应用两个条件检查“返回正文”函数样式

我有一个简单的功能检查,如下所示:

我想将其转换为更简单的样式:

但是IDE(Android Studio 3.0 Beta7)给了我一个错误,强调了大于('>')运算符:

操作员调用对应于点限定调用 'controllerId?.length.compareTo(BLUETOOTH_NAME_PREFIX.length) ,此处不允许

它还下划线作为错误行 controllerId?.startsWith(BLUETOOTH_NAME_PREFIX) 并说:

类型不匹配。必需:布尔值,找到布尔值?

真的是什么问题?这只是一个简单的方法,适用于第一个块 if-else 样式。

0 投票
1 回答
1596 浏览

java - Java 到 Kotlin 转换器和可为空的方法参数

我有一个案例,Java 到 Kotlin 的转换器由于没有将方法参数标记为可为空而使我悲惨地失败了。

示例:使用以下方法跟踪活动生命周期registerActivityLifecycleCallbacks

将此代码粘贴到 Kotlin 结果:

问题是savedInstanceState参数类型Bundle应该在哪里,Bundle?因为它的值可以是null.

Activity在这种情况下,当创建没有实例状态的 an 时,我们将得到以下异常:

请注意,造成这种情况的根本原因可能是onActivityCreated 文档 没有提到Bundle可以为空,而onCreate 文档确实可以解释为什么简单的onCreate转换可以按预期工作:

我的问题是我们如何知道哪些参数应该可以为空以防止此类问题?@Nullable注释在这里没有帮助。

0 投票
3 回答
35010 浏览

android - 在可空接收器类型的 arraylist 上只允许安全或非空断言调用

刚开始使用 kotlin 进行 android 开发。我的数组列表是这样声明的-

现在我试图通过它的位置访问一个元素

但我得到低于编译时错误 -

在可空接收器类型的 arraylist 上只允许安全或非空断言调用

为什么我会收到此错误,我该如何解决?

0 投票
2 回答
733 浏览

kotlin - 超类中的要求 init 块引发 IllegalArgumentException [Kotlin]

早安 Kotlin 大师。

我有一个继承结构,其中抽象超类实现了一些共享的数据检查。编译器不会抱怨,但在执行时 JVM 会抛出 IllegalArgumentException

编码

异常如下所示

谢谢你的时间

一切顺利

0 投票
1 回答
2984 浏览

kotlin - kotlin 逆布尔安全铸造

假设我有一个对象响应。现在我想在响应下检查一个布尔变量成功,并提前返回响应不成功。

现在我想使用 Kotlin 的空安全检查,如下所示

如果我没记错的话,如果 response 或 success 为 null,我们将在 if 条件内返回 true。但是,如果 response.success 不为 null 且等于 true,我们仍然会从函数返回,这不是我想要的。我该如何纠正这种情况?

0 投票
1 回答
767 浏览

android - 如何使用自定义类对象正确实现 lateinit 以在 android 中的 onCreate() 中使用避免“预期的属性获取器或设置器”错误

我正在尝试使用 Kotlin 将 Dialogflow(以前的 api.ai)代理与我的 Android 应用程序集成。我查看了关于 kotlin 的其他问答lateinit,Android 中的 onCreate() 生命周期非常适合后期初始化实现,以避免在 Kotlin 中使用空对象和相应!!的访问编写脏代码。?但是我在尝试自定义类的实例时遇到了“ Property getter or setter expected ”的错误。lateinint这是代码:

这给了我“预期的属性获取器或设置器”的错误lateinit settingsManager。这是SettingsManager定义:

那么这样做的正确方法是什么?我需要对 SettingsManager 类进行一些更改吗?请清楚地解释整个概念。

0 投票
3 回答
1360 浏览

kotlin - Kotlin - 安全呼叫运算符的链接。不必要的接线员电话

以下面使用安全调用运算符 (?.) 的示例为例:

我了解我们需要在 sampleB 上使用安全的呼叫操作员。但是为什么我们需要sampleC 上的安全调用运算符。如果我删除该运算符,它不会编译。

根据我对运算符的理解,如果 sampleB 为 null,则该行返回 null。如果 sampleB 不为空,我们可以根据它的类型确定 sampleC 不为空。但是为什么 Kotlin 会在 sampleC 上强制使用安全调用运算符?