从包中检索传递的参数时,为什么 Android Studio 警告并建议使用 requireArguments() 而不是参数!!?

When retrieving passed arguments from a bundle, why does Android Studio warn and suggest using requireArguments() instead of arguments!!?

所以,正如标题所说,我正在尝试根据我正在使用 var args = GameWonFragmentArgs.fromBundle(arguments!!) 关注的文档从包中检索传递的参数。 但是 Android Studio 建议使用以下代码: var args = GameWonFragmentArgs.fromBundle(requireArguments())

我查阅了 Android 片段文档,发现 requireArguments() returns @NonNull Bundle 或 IllegalStateException。为什么 Android Studio 建议使用它,两者之间有什么区别?

此外,我找不到有关 fromBundle() 的相关文档。

在 androidx.fragment:fragment

中有一些 api 的变化

requireArguments() --- returns @NonNull Bundle 或抛出 IllegalStateException 的方法。

fromBundle(arguments!!) --- 这些情况下 App 可能会因为空指针异常而崩溃。如果参数为空,应用程序将崩溃。

根据 UseRequireInsteadOfGet Lint 警告:

AndroidX added new "require____()" versions of common "get___()" APIs, such as getContext/getActivity/getArguments/etc. Rather than wrap these in something like requireNotNull(), using these APIs will allow the underlying component to try to tell you why it was null, and thus yield a better error message.

重要的是,错误消息总是提到 哪个片段 导致了问题,包括片段的 class 名称及其唯一 ID。这在将该 ID 与 Fragment's debug logging 相关联时特别有用,从而让您了解首次添加或更新该片段的时间。