Konstrukcja return new () {}

0
 public class IterableClass implements Iterable<String> {
  protected String[] words = ("i stad wlanie wiemy, ze " +
    "Ziemia ma ksztalt banana.").split(" ");
  public Iterator<String> iterator() {
    return new Iterator<String>() {
      private int index = 0;
      public boolean hasNext() {
        return index < words.length;
      }
      public String next() { return words[index++]; }
      public void remove() { // Niezaimplementowana
        throw new UnsupportedOperationException();
      }
    };	
}

Ktoś mógłby mi wyjaśnić jak działa ta konstrukcja w bloku po iterator(), czemu po return new Iterator<String>() następuje blok instrukcji.

2

Jest to klasa anonimowa. Może się w niej znajdować to samo co w nieanonimowej klasie.

2

To tak (mniej więcej) jakbyś robił

class CosTam implements Iterator<String> {
      private int index = 0;
      public boolean hasNext() {
        return index < words.length;
      }
      public String next() { return words[index++]; }
      public void remove() { // Niezaimplementowana
        throw new UnsupportedOperationException();
      }
}
return new CosTam();

Tylko, że w twoim kodzie nie nadajesz swojej klasie żadnej nazwy. Klasy anonimowe przydają się w wielu sytuacjach, ale w Javie 8 rzadziej trzeba je jawnie tworzyć (jedno z głównych zastosowań zostało zastąpione przez lambdy).

1 użytkowników online, w tym zalogowanych: 0, gości: 1