2016-10-15 1 views
0

Anforderungen gefunden: Finden Sie letzte Bar Objekt aus einer Liste verschiedenen Objekte, NoSuchElementException werfen, wenn nichtFinden letztes Objekt aus einer Liste von Objekten, Exception werfen, wenn nicht

Bar findLast(List stuff) throws NoSuchElementException { } 

Meine Lösung finden:

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(); 
    } 

Fragen:

  1. brauchen wir die throws NoSuchElementException im Methodenkopf?
  2. Benötigen wir try catch Block in der letzten Zeile innerhalb der Methode? Wenn das so ist, wie?
  3. Funktioniert dieser Code?

Antwort

1

Sie brauchen nicht NoSuchElementException zu erklären, weil es keine geprüft Ausnahme (es ist eine Laufzeitausnahme, wie NPE).

Sie brauchen den try catch-Block nicht, wenn Sie ihn aufrufen, da nicht markierte Ausnahmen nicht abgefangen werden müssen.

Der Code funktioniert, indem er zurückgibt, sobald er Bar findet, aber wenn die Schleife endet, ohne einen zu finden, wird die Ausnahme ausgelöst.


Alternative Implementierung:

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