Sto studiando le classi anonime e in tutta sincerità ho capito poco.
Sul manuale c'è un esempio che dovrebbe permettere di comprendere bene il funzionamento delle classi anonime.
L'esempio è il seguente:
codice:public class Film { private String nome; private String genere; private int mediaRecensioni; public Film (String nome, String genere, int mediaRecensioni) { this.nome = nome; this.genere = genere; this.mediaRecensioni = mediaRecensioni; } // metodi set e get omessi public String toString(){ return getNome(); } }codice:public class Videoteca { private Film[] films; public Videoteca () { films = new Film[10]; caricaFilms(); } public void setFilms(Film[] films) { this.films = films; } public Film[] getFilms() { return films; } public Film[] getFilmDiFantascienza() { Film [] filmDiFantascienza = new Film[10]; for (int i = 0, j= 0; i< 10;i++) { if ("Fantascienza".equals(films[i].getGenere())) { filmDiFantascienza[j] = films[i]; j++; } } return filmDiFantascienza; } public Film[] getBeiFilm() { Film [] beiFilms = new Film[10]; for (int i = 0, j= 0; i< 10;i++) { if (films[i].getMediaRecensioni() >3) { beiFilms[j] = films[i]; j++; } } return beiFilms; } private void caricaFilms() { // caricamento film } }A Questo punto il manuale dice che la soluzione migliore consiste nell'utilizzo delle classi anonime:codice:public class TestVideoteca { public static void main(String args[]) { Videoteca videoteca = new Videoteca(); System.out.println("\nFilm di Fantascienza:"); Film[] filmDiFantascienza = videoteca.getFilmDiFantascienza(); for(Film film : filmDiFantascienza) { if(film != null) { System.out.println(film); } } // omesso test bei film }
codice:public interface FiltroFilm { boolean filtra(Film film); }codice:public class Videoteca { private Film[] films; public Videoteca () { films = new Film[10]; caricaFilms(); } public void setFilms(Film[] films) { this.films = films; } public Film[] getFilms() { return films; } 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; } private void caricaFilms() { // caricamento film } }codice:public class TestVideoteca { public static void main(String args[]) { Videoteca videoteca = new Videoteca(); System.out.println("\nFilm di Fantascienza:"); Film[] filmDiFantascienza = videoteca.getFilmFiltrati(new FiltroFilm() { public boolean filtra(Film film) { return"Fantascienza".equals(film.getGenere()); } } ); stampaFilm(filmDiFantascienza); System.out.println("Bei Film:"); Film[] beiFilms = videoteca.getFilmFiltrati(new FiltroFilm() { public boolean filtra(Film film) { return film.getMediaRecensioni() >3; } } ); stampaFilm(beiFilms); private static void stampaFilm(Film [] films) { for (Film film: films) { if (film != null) { System.out.println(film); } } }
Io di questo esempio ho capito ben poco, cioè ho capito l'utilizzo delle classi anonime ma non riesco a comprendere questo specifico caso.
Mi potete aiutare nella comprensione?

Rispondi quotando