Java return 在 for each 循环之外

Java return outside of a for each loop

简单的虚拟问题...我创建了一个方法,它在 for 循环后向我发送一个对象。 for 循环使我的相关对象成为 return。但是Java要求我在方法的底部发送一个return。问题是......在我的方法之外我没有任何东西可以return。有办法告诉我只 return 一个错误吗?

这里是有问题的代码......非常简单!

public Stock getStockInfos(String selectedStock) {
    for(Stock temp:registreStock){
        if((temp.getSymbol()).equals(selectedStock)){
            return temp;
        }
    }
}

通常,我需要在末尾添加一个 return 语句...我找到的一个解决方案是在底部制作一份 temp 和 return 这个副本。如果这是正确的解决方案,有一个简单的方法 copy/clone this object?

您必须问问自己是否可能找不到给定代码的股票,以及在这种情况下应该发生什么。一种选择是 return null 或引发异常。

public Stock getStockInfos(String selectedStock) {
    for(Stock temp:registreStock){
        if((temp.getSymbol()).equals(selectedStock)){
            return temp;
        }
    }

    return null;
}

试试这个。所有执行路径都需要一个 return 值。

   public Stock getStockInfos(String selectedStock) {
   
     for(Stock temp:registreStock){
          if((temp.getSymbol()).equals(selectedStock)){
            return temp;
          }
      }

    // This line of code will not be reached assuming return temp is executed - 
    // but will take care of the message
   return null ;
   }

当然,调用此方法的代码必须测试可能 returned 的空值。

我终于做到了,而且效果很好

    public Stock getStockInfos(String selectedStock) {
    Stock stockSelected = null;
    for(Stock temp:registreStock){
        if((temp.getSymbol()).equals(selectedStock)){
            stockSelected = temp;
        }
    }
    return stockSelected;
}

但是...是的...如果找不到对象,我需要思考一下!你是对的!

谢谢我再想想!!! :P

如果 registreStock 是集合,您可以使用流和 Optional 而不是可为 null 的值。像这样:

Optional<Stock> result = registreStock
    .stream()
    .filter((stock) -> stock.getSymbol().equals(selectedStock))
    .findFirst();

返回 null 是不好的做法。尽可能使用 Optional