由于某种原因,我的项目中的这个功能失败了:
public void SetPlayersLineups(HashMap<Integer, Player> _players,
ArrayList<Integer> _lineup, boolean isAwayTeam) {
System.out.println(_players.get(2)); //works properly
System.out.println(_players.get(2).getNumberHits()); //null pointer exception
if (isAwayTeam) {
this.awayLineup = _lineup;
this.awayPlay = _players;
} else {
this.homeLineup = _lineup;
this.homePlay = _players;
}
}
/* from Player class */
public int getNumberHits() {
return this.hits;
}
我有一个Player类,其成员获取函数getNumberHits()。未正确设置this.awayPlay和this.homePlay属性。所以我使用System.out.println语句进行了调试。第一个正确返回一个Player实例。但是当我调用get函数时,我得到一个空指针异常。有什么想法吗?
答案 0 :(得分:2)
好的,一次一件事。首先,您打印_players.get(2).getNumberHits()
并获得NPE。 _players.get(2)
返回null
,或getNumberHits()
执行引发NPE的操作。情况并非如此_players2
是null
,因为您已经说过有效。
因此,您需要查看您传递的对象_players
的错误。我建议您尝试设置断点并使用IDE(例如Eclipse或Netbeans)分析对象
答案 1 :(得分:1)
如果hits
被声明为Integer
且null
,则此方法为:
Integer hits; // default value of objects is null
public int getNumberHits() {
return hits;
}
将因auto unboxing而抛出NPE,因为该方法实际编译为:
public int getNumberHits() {
return hits.intValue();
}
将值分配给hits
:
Integer hits = 0;
或授予hits
int
类型,其默认值为0
,而不是null
:
int hits;
答案 2 :(得分:0)
问题是hits为null,并且Java尝试将autobox命中(Integer)命中为int,并产生NullPointerException