Возможно ли для метода, который возвращает примитивный тип, возвращать ноль? - PullRequest
0 голосов
/ 24 октября 2018

Я практикую с ArrayList и столкнулся с чем-то, чего я не понимаю.У меня есть класс Knapsack и класс Item, я заполняю knapsacks с items и выполняю различные тесты на knapsacks и т. Д.

Один из публики Knapsackметоды возвращает общий вес элементов non-null в knapsack.Другой метод Knapsack, который является методом статического класса, возвращает самый тяжелый knapsack в массиве Knapsack объектов.

Когда я вызываю этот код, чтобы проверить, равны ли элементы в knapsack1000g:

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;
}

Меня действительно смущает, почему IntelliJ предупреждает меня о NPE, когда я тщательно проверил null в этих методах и totalWeightInGrammes() возвращает тип примитива int.

Большое спасибоза все комментарии:)

1 Ответ

0 голосов
/ 24 октября 2018
Knapsack.heaviestKnapsack(sacks).totalWeightInGrammes()
         ^^^^                    ^^^^ 
     can return null          NPE warning

У вас есть NPE warning на .totalWeightInGrammes(), потому что heaviestKnapsack() может вернуть null, поэтому вызов .totalWeightInGrammes() вызовет NPE

.
...