我正在与ArrayList
一起练习,遇到了我不理解的问题。我有一个Knapsack
类和一个Item
类,我正在用knapsacks
填充items
并在knapsacks
等上进行各种测试。
公共Knapsack
方法之一返回non-null
中knapsack
个项目的总权重。另一个Knapsack
方法是静态类方法,它返回knapsack
对象数组中最重的Knapsack
。
当我调用此代码来测试knapsack
中的项目是否等于1000g时:
testIntEqual("heaviestKnapsack", 1000, Knapsack.heaviestKnapsack(sacks).totalWeightInGrammes());
IntelliJ给我一个NullPointerException
的呼叫totalWeightInGrammes()
警告
以下是heaviestKnapsack()
和totalWeightInGrammes()
方法的实现:
public static Knapsack heaviestKnapsack(Knapsack[] knapsacks) {
// TO DO
if (knapsacks.length != 0) {
Knapsack heaviest;
int index = 0;
while (true) {
heaviest = knapsacks[index];
if (heaviest == null) {
index++;
} else {
break;
}
}
for (Knapsack knapsack : knapsacks) {
if (knapsack != null && (getTotalKnapsackWeight(knapsack) > getTotalKnapsackWeight(heaviest))) {
heaviest = knapsack;
}
}
return heaviest;
}
return null;
}
public int totalWeightInGrammes() {
// TO DO
if (!knapsackItems.isEmpty()) {
int totalWeight = 0;
for (Item i : knapsackItems) {
if (i != null) {
totalWeight += i.getWeightInGrammes();
}
}
return totalWeight;
}
return 0;
}
当我在这些方法中对null
进行了彻底测试并且totalWeightInGrammes()
返回原始类型int
时,为什么IntelliJ向我警告有关NPE的问题,我感到非常困惑。
非常感谢所有评论:)
答案 0 :(得分:3)
Knapsack.heaviestKnapsack(sacks).totalWeightInGrammes()
^^^^ ^^^^
can return null NPE warning
您在NPE warning
上有一个.totalWeightInGrammes()
,因为heaviestKnapsack()
可以返回null
,因此对.totalWeightInGrammes()
的调用将引发{{1 }}