Java return 值仅来自循环内

Java return value only from within a loop

我有一个方法,如果找到,我需要 return 一个特定的对象,否则会抛出异常。所以我写了以下内容:

public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException{
    for(CustomerDetails nextCustomer : customers){
        if(givenID == nextCustomer.getCustomerID()){
            return nextCustomer;
        }else{
            throw new CustomerNotFoundException();
        }
    }
}

但是它需要我在方法的底部添加一个return语句。有没有办法忽略这个?

将您的代码更改为:

public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException{
    for(CustomerDetails nextCustomer : customers){
        if(givenID == nextCustomer.getCustomerID()){
            return nextCustomer;
        }
    }
    throw new CustomerNotFoundException();
}

它要求您为未执行循环的情况(即 customers 为空)提供方法的有效结果。你必须这样做:

for (CustomerDetails nextCustomer : customers){
    if (givenID == nextCustomer.getCustomerID()){
        return nextCustomer;
    }
}
throw new CustomerNotFoundException();

因为否则您会在第一个不满足 if.

中提供的条件的元素之后抛出异常

如果找到,您可以return该对象。如果找不到它,它会在循环结束时抛出异常:

public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException{
    for(CustomerDetails nextCustomer : customers){
        if(givenID.equals(nextCustomer.getCustomerID())){
            return nextCustomer;
       }
    }
       throw new CustomerNotFoundException();
}

注意。您将 strings== 进行比较。这里就得用equals方法了!

如果发生意外行为,则应抛出异常。搜索失败并非例外,而是一种罕见的常见原因。

为了良好的设计,你不应该抛出异常。相反,您可以扩展调用方法以测试结果是否为空或类似。

您可以在方法的末尾添加一个 return;。它无法访问,因此不会引起问题。

您还可以在循环中使用 try catch。如果您想遵循这条路线,这里有一个方便的教程。 http://tutorials.jenkov.com/java-exception-handling/basic-try-catch-finally.html

如果在循环中找不到客户,应该在循环外抛出异常。此外,您应该使用“.equals”而不是“==”,因为 "givenID" 是一个对象。

public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException {
    for (CustomerDetails nextCustomer : customers) {
        if (givenID.equals(nextCustomer.getCustomerID())){
            return nextCustomer;
        }
    }
    throw new CustomerNotFoundException();
}