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 } }
希望它会帮助你。