我有一个方法,如果找到,我需要返回一个特定的对象,否则抛出异常。所以我写了以下内容:
public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException{
for(CustomerDetails nextCustomer : customers){
if(givenID == nextCustomer.getCustomerID()){
return nextCustomer;
}else{
throw new CustomerNotFoundException();
}
}
}
但它要求我在方法的底部添加一个return语句。有没有办法忽略这个?
答案 0 :(得分:6)
它要求您在未执行循环时(即customers
为空)从方法中提供有效结果。你必须这样做:
for (CustomerDetails nextCustomer : customers){
if (givenID == nextCustomer.getCustomerID()){
return nextCustomer;
}
}
throw new CustomerNotFoundException();
因为否则你会在不满足if
中提供的条件的第一个元素之后抛出异常。
答案 1 :(得分:3)
将您的代码更改为:
public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException{
for(CustomerDetails nextCustomer : customers){
if(givenID == nextCustomer.getCustomerID()){
return nextCustomer;
}
}
throw new CustomerNotFoundException();
}
答案 2 :(得分:1)
如果找到对象,则可以返回该对象。如果找不到它会在循环结束时抛出异常:
public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException{
for(CustomerDetails nextCustomer : customers){
if(givenID.equals(nextCustomer.getCustomerID())){
return nextCustomer;
}
}
throw new CustomerNotFoundException();
}
请注意。您将strings
与==
进行了比较。在这里,您必须使用equals
方法!
答案 3 :(得分:0)
如果发生意外行为,则应抛出异常。失败的搜索不是例外,但很少是常见原因。
出于好的设计原因,你不应该抛出异常。相反,您可以扩展调用方法以测试结果是否为null-like。
答案 4 :(得分:0)
您只需在方法的末尾添加return;
即可。它不可访问,因此不会引起问题。
您还可以在循环中使用try catch。如果您希望遵循此路线,这是一个方便的教程。 http://tutorials.jenkov.com/java-exception-handling/basic-try-catch-finally.html
答案 5 :(得分:0)
如果在循环中找不到客户,它应该将异常抛出循环。你也应该使用" .equals"而不是" ==",因为" givenID"是一个对象。
public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException {
for (CustomerDetails nextCustomer : customers) {
if (givenID.equals(nextCustomer.getCustomerID())){
return nextCustomer;
}
}
throw new CustomerNotFoundException();
}