Kotlin – 如何将null值传入片段newInstance方法?

我已经使用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:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数b在com.mobile。 MyApp.ui.cart.fragments.MyFragment $ Companion.newInstance(MyFragment.kt:0)at com.mobile.MyApp.ui.cart.fragments.CartDetailsFragment.onCtaClicked(CartDetailsFragment.java:521)at com.mobile.MyApp。 ui.cart.fragments.CartDetailsFragment_ViewBinding $ android.view.View.performClick(View.java:6256)在androidknockknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)$ 1.doClick(CartDetailsFragment_ViewBinding.java:66)。 view.View android.os.Handler.handleCallback(Handler.java:789)android.os.Handler.dispatchMessage(Handler.java:98)android.os.Looper上的$ PerformClick.run(View.java:24701) .loop(Looper.java:164)at android.app.ActivityThread.main(ActivityThread.java:6541)at java.lang.reflect.Method.invoke(Native Method)at com.andro id.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

我怎样才能通过null

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

 fun newInstance(b: Bundle?): MyFragment 

Kotlin提供了(?)FOR处理null

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

希望它会帮助你。