Kotlin - 如何将空值传递给片段 newInstance 方法?

Posted

技术标签:

【中文标题】Kotlin - 如何将空值传递给片段 newInstance 方法?【英文标题】:Kotlin - how to pass in null value into fragments newInstance method? 【发布时间】:2018-06-17 03:30:13 【问题描述】:

我已经使用 Kotlin 创建了一个片段,并且您知道如何在 Java 中使用一种方便的静态方法来设置片段参数。像这样:

public static MyFragment newInstance(Bundle args)
    MyFragment fragment = new MyFragment();
    fragment.setArguments(args);
    return fragment;

我正在尝试在 Kotlin 中使用伴随对象来完成此操作,因为它是静态的。这是我到目前为止编译的内容:

companion object 
    fun newInstance(@Nullable b: Bundle): MyFragment 
        val frag = MyFragment()
        frag.arguments = b
        return frag
    

我在想,如果我使用 @Nullable 注释,我将被允许为捆绑传递 null,但是当我调用 MyFragment.newInstance(null) 时,我不断收到以下错误:

致命异常:主要 进程:com.mobile.MyApp.labs,PID:5758 java.lang.IllegalArgumentException:指定为非空的参数为空:方法 kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数 b 在 com.mobile.MyApp.ui.cart.fragments.MyFragment$Companion.newInstance(MyFragment.kt:0) 在 com.mobile.MyApp.ui.cart.fragments.CartDetailsFragment.onCtaClicked(CartDetailsFragment.java:521) 在 com.mobile.MyApp.ui.cart.fragments.CartDetailsFragment_ViewBinding$1.doClick(CartDetailsFragment_ViewBinding.java:66) 在 butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22) 在 android.view.View.performClick(View.java:6256) 在 android.view.View$PerformClick.run(View.java:24701) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

我怎样才能传入null

【问题讨论】:

discuss.kotlinlang.org/t/nullable-as-argument/1884 这在我的情况下不起作用。就像我传入 null 一样,我仍然希望创建并返回片段。 【参考方案1】:

在 Kotlin 中,您不传递 @Nullable,而是在类型名称后面写一个问号 (?) 以将其标记为可为空。

fun newInstance(b: Bundle?): MyFragment

【讨论】:

另外,请查看有关 Kotlin 中 null 安全性的官方文档:kotlinlang.org/docs/reference/null-safety.html【参考方案2】:

Kotlin 提供 (?) FOR 处理 null.have 看看

companion object 
    fun newInstance( b: Bundle?): MyFragment 
        val frag = MyFragment()
        frag.arguments = b
        return frag
    

希望对你有所帮助。

【讨论】:

以上是关于Kotlin - 如何将空值传递给片段 newInstance 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何将空值传递给 WebAPI 中的可空类型

将空值传递给 SVG 路径(使用 d3.js)以抑制丢失数据

将空值传递给 Python 中的存储过程

如何将 vb.net 中日期的空值传递给 sql 存储过程?

访问片段的上下文 [重复]

无法将空值分配给原始类型错误(Spring/Hibernate)