问题标签 [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.
spring - 如何在 kotlin 中将 @Autowired 或 @Value 等弹簧注释用于原始类型?
使用弹簧注释自动装配非基元,例如
作品。
但这不起作用:
有一个错误:
原始类型不允许使用 lateinit 修饰符。
如何将原始属性自动装配到 kotlin 类中?
reflection - 如何使用 Kotlin 中的默认构造函数参数值实例化对象?
我有具有默认值的数据类。
当某些值为空时,Java 反射无法实例化类。我得到了例外
这是因为java.lang.reflect.Constructor<T>.instantiateClass
方法需要不为空的参数。
我有类型信息,我有构造函数定义,但我不确定如何调用构造函数以便它使用默认值(这些值来自数据库并且categories
可以是null
)。有没有办法在 Kotlin 中实现这一点?
arrays - 有没有办法从一个范围创建一个非空数组?
在 Java 中,可以使用传统的 for 循环创建一个简单的数组:
对 Kotlin 的简单转换会产生以下结果:
问题是现在数组中的每个元素都是可选的;这使我的代码充满了?
运算符。
有没有办法以类似的方式创建一个数组,但没有可选类型?
kotlin - Kotlin:不能一次应用两个条件检查“返回正文”函数样式
我有一个简单的功能检查,如下所示:
我想将其转换为更简单的样式:
但是IDE(Android Studio 3.0 Beta7)给了我一个错误,强调了大于('>')运算符:
操作员调用对应于点限定调用 'controllerId?.length.compareTo(BLUETOOTH_NAME_PREFIX.length) ,此处不允许
它还下划线作为错误行 controllerId?.startsWith(BLUETOOTH_NAME_PREFIX) 并说:
类型不匹配。必需:布尔值,找到布尔值?
真的是什么问题?这只是一个简单的方法,适用于第一个块 if-else 样式。
java - Java 到 Kotlin 转换器和可为空的方法参数
我有一个案例,Java 到 Kotlin 的转换器由于没有将方法参数标记为可为空而使我悲惨地失败了。
示例:使用以下方法跟踪活动生命周期registerActivityLifecycleCallbacks
:
将此代码粘贴到 Kotlin 结果:
问题是savedInstanceState
参数类型Bundle
应该在哪里,Bundle?
因为它的值可以是null
.
Activity
在这种情况下,当创建没有实例状态的 an 时,我们将得到以下异常:
请注意,造成这种情况的根本原因可能是onActivityCreated 文档 没有提到Bundle
可以为空,而onCreate 文档确实可以解释为什么简单的onCreate
转换可以按预期工作:
我的问题是我们如何知道哪些参数应该可以为空以防止此类问题?@Nullable注释在这里没有帮助。
android - 在可空接收器类型的 arraylist 上只允许安全或非空断言调用
刚开始使用 kotlin 进行 android 开发。我的数组列表是这样声明的-
现在我试图通过它的位置访问一个元素
但我得到低于编译时错误 -
在可空接收器类型的 arraylist 上只允许安全或非空断言调用
为什么我会收到此错误,我该如何解决?
kotlin - 超类中的要求 init 块引发 IllegalArgumentException [Kotlin]
早安 Kotlin 大师。
我有一个继承结构,其中抽象超类实现了一些共享的数据检查。编译器不会抱怨,但在执行时 JVM 会抛出 IllegalArgumentException
编码
异常如下所示
谢谢你的时间
一切顺利
kotlin - kotlin 逆布尔安全铸造
假设我有一个对象响应。现在我想在响应下检查一个布尔变量成功,并提前返回响应不成功。
现在我想使用 Kotlin 的空安全检查,如下所示
如果我没记错的话,如果 response 或 success 为 null,我们将在 if 条件内返回 true。但是,如果 response.success 不为 null 且等于 true,我们仍然会从函数返回,这不是我想要的。我该如何纠正这种情况?
android - 如何使用自定义类对象正确实现 lateinit 以在 android 中的 onCreate() 中使用避免“预期的属性获取器或设置器”错误
我正在尝试使用 Kotlin 将 Dialogflow(以前的 api.ai)代理与我的 Android 应用程序集成。我查看了关于 kotlin 的其他问答lateinit
,Android 中的 onCreate() 生命周期非常适合后期初始化实现,以避免在 Kotlin 中使用空对象和相应!!
的访问编写脏代码。?
但是我在尝试自定义类的实例时遇到了“ Property getter or setter expected ”的错误。lateinint
这是代码:
这给了我“预期的属性获取器或设置器”的错误lateinit settingsManager
。这是SettingsManager
定义:
那么这样做的正确方法是什么?我需要对 SettingsManager 类进行一些更改吗?请清楚地解释整个概念。
kotlin - Kotlin - 安全呼叫运算符的链接。不必要的接线员电话
以下面使用安全调用运算符 (?.) 的示例为例:
我了解我们需要在 sampleB 上使用安全的呼叫操作员。但是为什么我们需要sampleC 上的安全调用运算符。如果我删除该运算符,它不会编译。
根据我对运算符的理解,如果 sampleB 为 null,则该行返回 null。如果 sampleB 不为空,我们可以根据它的类型确定 sampleC 不为空。但是为什么 Kotlin 会在 sampleC 上强制使用安全调用运算符?