首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用getter时,Dereference可能会产生NullPointerException。

在使用getter时,Dereference可能会产生NullPointerException。
EN

Stack Overflow用户
提问于 2017-04-30 09:49:45
回答 1查看 15.1K关注 0票数 9

我使用一个带有实例引用的自定义视图类,它充当编辑器。视图仅在片段中使用。我需要实例引用,这样我就可以始终获得自定义视图的自定义参数。

代码语言:javascript
复制
public static StoryView instance;
private Story story;

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

但是,当我使用这个getter方法更改导航抽屉的内容时,我会收到一个警告:

在这里:

代码语言:javascript
复制
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来实现的?也许这会破坏我的自定义视图中的实际instance.story

EN

回答 1

Stack Overflow用户

发布于 2017-04-30 09:53:30

这只是对可能的NPE (NullPointerException)的一个警告。您应该做的是在取消引用之前为s编写一个空检查。就这样。

代码语言:javascript
复制
if(s != null){
// Call to s.method();

}

最终,您必须确保所获得的任何引用都不能在为NULL时被取消引用。

就我个人而言,我遇到过几种情况,在取消引用之前不进行检查,这些情况大多数情况下都是错误。谷歌开发时,番石榴将NPE问题考虑在内,并将其纳入到他们的稳健设计中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43705083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档