Non riesco a capire questi pezzi di codice:
Ok, una classe anonima può o estendere una classe o implementare una interfaccia. In questo caso è evidente che deve implementare una interfaccia, ma perchè si sceglie di implementare una interfaccia piuttosto che usare una classe ed estenderla?codice:public interface FiltroFilm { boolean filtra(Film film); }
In questo caso non capisco cosa fa questo metodo. Dovrebbe restituire i film filtrati, ma in base a che criterio?codice:public Film[] getFilmFiltrati(FiltroFilm filtroFilm) { Film [] filmFiltrati = new Film[10]; for (int i = 0, j= 0; i< 10;i++) { if (filtroFilm.filtra(films[i])) { filmFiltrati[j] = films[i]; j++; } } return filmFiltrati; }
codice:Film[] filmDiFantascienza = videoteca.getFilmFiltrati(new FiltroFilm() { public boolean filtra(Film film) { return"Fantascienza".equals(film.getGenere()); } } );I due pezzi di codice di sopra invece sono la parte principale del dubbio perchè rappresentano appunto le classi anonime.codice:Film[] beiFilms = videoteca.getFilmFiltrati(new FiltroFilm() { public boolean filtra(Film film) { return film.getMediaRecensioni() >3; } } );
Ho capito che la sintassi deve essere del tipo:
e che volendo si può passare questa classe anonima come input ad un metodo (come accade con getFilmFiltrati).codice:FiltroFilm filtro = new FiltroFilm() { public boolean filtra(Film film) { ... } };
Quello che però non capisco è cosa realmente accade in quelle righe di codice, in modo particolare il metodo filtra restituisce un booleano. E allora cosa fa quel codice? Passa un booleano al metodo getFilmFiltrati?
Insomma mi sfugge la logica di questi pezzi di codice.

Rispondi quotando