我正在与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的问题,我确实感到困惑。

非常感谢所有评论:)

最佳答案

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


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

关于java - 返回原始类型的方法是否有可能返回null?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52958289/

10-09 19:42