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();
}
我有一个方法,如果找到,我需要 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();
}