Java Object Null检查方法

时间:2014-02-09 20:19:22

标签: java null-check

我需要在这个公式[i]中为这个公式创建一个空检查,我不完全确定如何解决这个问题,因为我不太熟悉null检查和非常新的编程。非常感谢任何和所有帮助!

public static double calculateInventoryTotal(Book[] books)
{
    double total = 0;

    for (int i = 0; i < books.length; i++)
    {
        total += books[i].getPrice();
    }

    return total;
}

8 个答案:

答案 0 :(得分:12)

首先,您应检查books本身是否为空,然后只需检查books[i] != null

if(books==null) throw new IllegalArgumentException();

for (int i = 0; i < books.length; i++){
   if(books[i] != null){
        total += books[i].getPrice();
   }
}

答案 1 :(得分:4)

您可以向方法添加保护条件以确保books不为null,然后在迭代数组时检查null:

public static double calculateInventoryTotal(Book[] books)
{
    if(books == null){
        throw new IllegalArgumentException("Books cannot be null");
    }

    double total = 0;

    for (int i = 0; i < books.length; i++)
    {
        if(books[i] != null){
            total += books[i].getPrice();
        }
    }

    return total;
}

答案 2 :(得分:3)

如果您使用的是Java 7,可以使用Objects.requireNotNull(object[, optionalMessage]); - 检查参数是否为null。要检查每个元素是否为空,只需使用

if(null != books[i]){/*do stuff*/}

示例:

public static double calculateInventoryTotal(Book[] books){
    Objects.requireNotNull(books, "Books must not be null");

    double total = 0;

    for (int i = 0; i < books.length; i++){
        if(null != book[i]){
            total += books[i].getPrice();
        }
    }

    return total;
}

答案 3 :(得分:2)

如果Books的数组为null,则返回零,因为它看起来方法计算所有提供的书籍的总价格 - 如果没有提供Book,则零是正确的值:

public static double calculateInventoryTotal(Book[] books)
{
if(books == null) return 0;
    double total = 0;
    for (int i = 0; i < books.length; i++)
    {
        total += books[i].getPrice();
    }
    return total;
}

你可以决定输入空输入值是否正确(不正确,但......)。

答案 4 :(得分:2)

您只需使用null(或==)运算符将对象与!=进行比较即可。 E.g:

public static double calculateInventoryTotal(Book[] books) {
    // First null check - the entire array
    if (books == null) {
        return 0;
    }

    double total = 0;

    for (int i = 0; i < books.length; i++) {
        // second null check - each individual element
        if (books[i] != null) {
            total += books[i].getPrice();
        }
    }

    return total;
}

答案 5 :(得分:1)

在for循环中,只需添加以下行:

if(books[i] != null) {
     total += books[i].getPrice();
}

答案 6 :(得分:0)

这个问题相当陈旧。此时,提问者可能已经变成了一位经验丰富的Java开发人员。但是我想在这里添加一些有助于初学者的意见。

对于JDK 7用户,请使用

Objects.requireNotNull(object[, optionalMessage]);

不安全。如果找到NullPointerException对象且nullRunTimeException,则此函数会抛出null

那将终止整个程序!!因此,最好使用==!=检查List

另外,请使用Array代替Collections。尽管访问速度相同,但使用Array而非Vector具有一些优势,例如,如果您决定稍后更改底层实现,则可以灵活地执行此操作。例如,如果您需要同步访问,则可以将实现更改为public static double calculateInventoryTotal(List<Book> books) { if (books == null || books.isEmpty()) { return 0; } double total = 0; for (Book book : books) { if (book != null) { total += book.getPrice(); } } return total; } ,而无需重写所有代码。

NullPointerException

另外,我想upvote @ 1ac0的答案。 在写作时我们也应该理解并考虑方法的目的。调用方法可以根据被调用方法的返回数据进一步实现逻辑。

此外,如果您使用JDK 8进行编码,它还引入了一种新方法来处理空检查并保护代码免受Optional的影响。它定义了一个名为this的新类。 Have a look at this for detail

最后,原谅我的英语不好。

答案 7 :(得分:0)

public static double calculateInventoryTotal(Book[] arrayBooks) {

    final AtomicReference<BigDecimal> total = new AtomicReference<>(BigDecimal.ZERO);
    Optional.ofNullable(arrayBooks).map(Arrays::asList).ifPresent(books -> books.forEach(book -> total.accumulateAndGet(book.getPrice(), BigDecimal::add)));
    return total.get().doubleValue();

}