java - 无法捕获异常

标签 java exception try-catch

我在产品实现中有以下代码

public void updateProduct(Product product) throws ProductNotFoundException {

    Iterator<Product> it = allProducts.iterator();
    Product p = null;
    if (!allProducts.isEmpty()) {
        while (it.hasNext()) {
            p = it.next();
            if (p.getId() == product.getId()) {
                p.setPrice(product.getPrice());
                System.out.println("Successfully updated the product "
                        + product.getId());
            }
        }
    } else {
        System.out.println("No such product " + product.getId());
        throw new ProductNotFoundException(product.getName());
    }
}

//主要内容

ipod.setId(Integer.MAX_VALUE);

try {
        productDB.updateProduct(ipod);
        Assert.fail("should've gotten ProductNotFoundException");
    } 
catch (ProductNotFoundException pnfe) {
        // expecting this
    }

Junit 抛出以下异常

Exception in thread "main" productdb.util.AssertionFailedError: should've gotten ProductNotFoundException
    at productdb.util.Assert.fail(Assert.java:43)
    **at productdb.ProductDBClient.testProductServer(ProductDBClient.java:85)**
    at productdb.ProductDBClient.main(ProductDBClient.java:20)

不幸的是,我无法使用 try 和 catch。编译器抛出错误,说它无法被捕获。

你能给我一些我做错的地方吗?

非常感谢!!

最佳答案

您忘记了当每个可用产品 p.getId() == product.getId() 为 false 时的情况。按照一般代码片段逻辑,如果没有 id 与请求匹配,您还应该抛出异常。像这样重写:

    public void updateProduct(Product product) throws ProductNotFoundException {
    for (Product existing : allProducts) {
        if (existing.getId() == product.getId()) {
            existing.setPrice(product.getPrice());
            return;
        }
    }
    System.out.println("No such product " + product.getId());
    throw new ProductNotFoundException(product.getName());
}

您还可以查看一些函数式风格的库,例如 Guava,以简化对集合的操作。

关于java - 无法捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16850327/

相关文章:

java - 如何从目录和子目录中复制具有特定扩展名的所有文件?

java - 处理控制台命令的最佳 Java 设计模式

Java异常弹出窗口

Java:未捕获故意的 BadPaddingException

Python crontab 尝试除 ValueError

java - 我应该在 try-with-resources 语句中声明每个资源吗?

java - 如何检测碰撞?

java - 拒绝后无法清除表单输入

java - 在Java中,为什么要在catch block 中指定异常类型?

java - 该文档背后的意图是什么?