返回原始类型的方法是否可以返回null?

时间:2018-10-23 21:47:42

标签: java arraylist nullpointerexception

我正在与ArrayList一起练习,遇到了我不理解的问题。我有一个Knapsack类和一个Item类,我正在用knapsacks填充items并在knapsacks等上进行各种测试。

公共Knapsack方法之一返回non-nullknapsack个项目的总权重。另一个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的问题,我感到非常困惑。

非常感谢所有评论:)

1 个答案:

答案 0 :(得分:3)

Knapsack.heaviestKnapsack(sacks).totalWeightInGrammes()
         ^^^^                    ^^^^ 
     can return null          NPE warning

您在NPE warning上有一个.totalWeightInGrammes(),因为heaviestKnapsack()可以返回null,因此对.totalWeightInGrammes()的调用将引发{{1 }}