Tag: 可空

有没有更好的方式来写在kotlin?

这是我现在的代码: private val EXTRA_IS_REFRESHING = “IS_REFRESHING” private var isRefreshing: Boolean = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) isRefreshing = if (savedInstanceState != null) savedInstanceState!!.getBoolean(EXTRA_IS_REFRESHING, false) else false } Kotlin有没有更好的方法来写最后一行?

调用不接受kotlin的null的java代码

IDEA社区2017.1.2,JRE 1.8,Kotlin 1.1.2-2 我有位于libGdx中的Java方法,它们没有关于它们的可空性的任何注释,例如: public void render (final RenderableProvider renderableProvider) { renderableProvider.getRenderables(renderables, renderablesPool); 我们可以看到,参数不能为空。 然而,由于没有任何说明它是非空参数,Kotlin会愉快地在RenderableProvider?传递null RenderableProvider? 。 如何告诉Kotlin在编译期间检查我应该传递RenderableProvider而不是RenderableProvider? ? 我已阅读外部注释 ,但没有“指定自定义Kotlin签名”,如果我注释renderableProvider作为@NotNull没有任何更改 – kotlin仍允许为空。 我甚至试图用XML手动替换org.jetbrains.annotations.NotNull与javax.annotation.Nonnull ,但它没有什么区别 – 代码编译和NPE崩溃。

Kotlingenerics改变返回types

我在Java中有这种方法我想转换为Kotlin,但仍然使用Java和Kotlin: @Nullable public static T nullIfEmpty(@Nullable final T t) { return TextUtils.isEmpty(t) ? null : t; } 在另一个地方,我有一个接受字符串的方法: public static doSomething(@Nullable String foo) {} 我这样叫: String foo = “”; doSomething(nullIfEmpty(foo)); // == doSomething(null); since foo is empty 在将nullIfEmpty()转换为这个Kotlin代码片段之后: fun nullIfEmpty(t: T?): T? { return if (TextUtils.isEmpty(t)) null else t } Java不再编译抱怨有一个参数types不匹配 – 当它期望一个String时用CharSequence调用该函数。 什么是正确的语法来解决这个问题?

Kotlin mutableMap.put返回空值

在kotlin标准库中我们有MutableMap接口,它有这个方法 public abstract fun put(key: K, value: V): V? 为什么它返回可以为空的值,如果它接受不可为空的值? 这是完成的Java互操作?