Quote Originariamente inviata da newutente Visualizza il messaggio
codice:
          Film[] filmDiFantascienza = videoteca.getFilmFiltrati(new FiltroFilm() {
                public boolean filtra(Film film) {
                return"Fantascienza".equals(film.getGenere());
              }
          } );
codice:
          Film[] beiFilms =   videoteca.getFilmFiltrati(new FiltroFilm() {
                public boolean filtra(Film film) {
                return film.getMediaRecensioni() >3;
                }
          } );
Le classi anonime nel codice sono due, sono quei new FiltroFilm() { .... } riportati qui sopra.

Una classe anonima è una classe in cui la definizione e la istanziazione praticamente coincidono, sono cioè nello stesso punto. E il termine "anonima" riguarda il fatto che la classe non ha un nome nel sorgente. Nel bytecode generato un nome ovviamente ce l'ha ma è generato dal compilatore e non è noto a priori dal programmatore (in realtà si sa come il compilatore, perlomeno quello Sun/Oracle, genera questi nomi).

Una classe anonima può fare solo una di queste cose: estendere una classe oppure implementare una (1) interfaccia. Mai entrambe le cose.

Potrei andare avanti a spiegare ma dovrei dirne parecchie di cose ..... piuttosto, quali sono precisamente i tuoi dubbi?