gpt4 book ai didi

java - 使用 getter 时取消引用可能会产生 NullPointerException

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:11:47 25 4
gpt4 key购买 nike

我正在使用一个带有实例引用的自定义 View 类作为编辑器。 View 仅在 fragment 中使用。我需要实例引用,以便始终可以获取自定义 View 的自定义参数。

public static StoryView instance;
private Story story;

public static Story getCurrentStory(){
if(instance == null) return null;
else return instance.story;
}

但是,当我使用此 getter 方法更改 Navigation Drawer 的内容时,我收到警告:

enter image description here

在这里:

private static IDrawerItem[] drawerEditorItems(){
Story s = StoryView.getCurrentStory();
SectionDrawerItem section_editor = new SectionDrawerItem()
.withName(str("placeholder_story_by", s.name, s.author))
.withDivider(false);
return new IDrawerItem[]{ section_editor };
}

str(String id, Object... args) 是一种基本格式化 i18n 字符串的静态方法。


我的猜测是引用 s 在函数作用域的末尾被销毁可能是通过分配 s = null?也许这会从我的自定义 View 中破坏实际的 instance.story

最佳答案

当你打电话时

public static Story getCurrentStory(){
if(instance == null) return null;
else return instance.story;
}

您检查以确保实例不为空。如果是,则返回 null。这里的情况可能是实例始终为空(从未初始化)。这意味着如果您想获取当前故事,您必须确保实例在调用之前已初始化。

此外,这在技术上是没有必要的。返回 null 实例等同于检查它是否为 null,然后返回 null。您还可以使用 @NotNull@Nullable 来帮助编译器、您自己以及处理代码/与之交互的任何其他人。

此外,在某些情况下它可能仍会返回 null,因此您需要添加一个检查以确保它不为 null。这可以使用 if 语句来完成:

if(s != null){
//Do whatever
}

但您收到该警告的原因是(根据我的经验)几乎可以保证您会收到异常。以此为例:

View v = null;
v.setText("");

这显示了与您收到的警告完全相同的警告。因此,无论如何,您的方法很可能会返回 null。因此,您必须确保 instance 已初始化,并有一个 if 语句来确保应用程序在它为 null 时不会崩溃。初始化 instance 是一种确保您获得非空引用的方法

关于java - 使用 getter 时取消引用可能会产生 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43705083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com