2016-10-15 19 views
0

要求:從不同對象的列表中找到最後一棒的對象,拋出NoSuchElementException異常,如果沒有找到從對象列表,拋出異常查找最後一個對象,如果沒有找到

Bar findLast(List stuff) throws NoSuchElementException { } 

我的解決辦法:

Bar findLast(List stuff) throws NoSuchElementException { 
     Bar bar = new Bar(); 
     for(int i=stuff.size()-1;i>=0;i--){ 
      if(stuff.get(i).getClass().isInstance(bar)){ 
       return (Bar) stuff.get(i); 
      } 
     } 
     throw new NoSuchElementException(); 
    } 

問題:

  1. 我們是否需要在方法頭的throws NoSuchElementException
  2. 我們是否需要try catch塊在方法內的最後一行?如果是這樣,怎麼樣?
  3. 此代碼是可用的嗎?

回答

1

你並不需要聲明NoSuchElementException,因爲它不是一個檢查異常(這是一個運行時異常,如NPE)。

調用它時,您不需要try catch塊,因爲不需要檢查未檢查的異常。

代碼一找到Bar就立即返回,但如果循環結束時沒有找到,則引發異常。


替代實現:

Bar findLast(List stuff) { 
    return stuff.stream().filter(o -> o instanceof Bar).findFirst().orElseThrow(NoSuchElementException::new); 
}