Ciao a tutti,
ho un problema di compresione sulla creazione di un metodo, che richiama una classe astratta che estende altre 4 classi.vi spiego subito:
il metodo Song[] query(Query q):chiede di estrarre da un array(nella quale ho memorizzato le mie inf) gli elementi che verificano la ricerca q;
questo metodo e' collegato con la creazione di una classe madre astratta di nome "Query" che ha all'interno un metodo "abstract boolean match(elemento s)" che verifica che l'elemento s rispetti i criteri di ricerca selezionati.
questa l'ho definita molto semplicemente essendo astratta:
public abstract class Query
{
public abstract boolean match(Song s);
}
e ho demandato lo sviluppo del metodo alle varie sottoclassi che estendno questa:
vi faccio un'esempio di che cosa e' richiesto nella sottoclasse:
la classe ArtistQuery estende la classe Query.
e questa classe rappresenta la ricerca per gli elementi nel mio array
(gia presente in hd)che sono attribuiti ad un certo artista.
la classe ha una variabile d'istanza "private String artist"(che contiene il nome dell'artista dalla quale si vogliono estrarre i brani.
il costruttore ArtistQuery(String a) si limita ad inizializzare i campi privati di questa classe.
e poi c'e' il metodo "boolean match(elemento s)"(che e' lo stesso dichiarato nella Query madre ma non sviluppato perche' abstract) che controlla se l'elemento s e' interpretato dall'artista specificato nella variabile d'istanza.ritorna true se vera e false se e' falsa.
La stessa cosa succede per le altri classi che estendo query ma che hanno tipi di ricerche diverse.
questa sottoclasse l'ho intestata come segue:
public class ArtistQuery extends Query{
private String artist;
private String tmpArtist;//serve per togliere gli spazi dalla parola acquisita
private String tmpArtist2;//idem ma riferito alla canzone dell'array gia memorizzato
public ArtistQuery(String a)
{
artist=a;
}
e poi ho inserito questo metodo: che mi confronta l'artista inserito con l'artista dell'elemento s.
public boolean match(Song s)//e' lo stesso dichiarato nella abstract
{
tmpArtist = this.artist;
tmpArtist = tmpArtist.replaceAll(" ", "");
tmpArtist2 = s.getArtist();
tmpArtist2 = tmpArtist2.replaceAll(" ", "");
if(this.tmpArtist.compareToIgnoreCase(tmpArtist2)= =0)
{
return true;
}
else{
return false;
}
}
}
il tutto me l'ho compilato tranquillamente e mi sembra che possa avere un senso logico.il problema sta quando devo creare il metodo iniziale richiesto.forse sbaglio qualcosa a livello di logica.
perche' non riesco a capire come invocare questo metodo match e quindi estrarre tutti gli elementi che fanno parte dell'array creato su disco in un'altro array il cui contenuto e' relativo agli elementi che verificano una tale ricerca q.(come per esempio la ricerca per artita)
vi scrivo qui sotto il codice che penso sia sbagliato ma non capisco dove:
public Song[] query(Query q)
{
int x;
Song[] query;
if(songs!=null)
query = new Song[songs.length];
for(x = 0 ;x <= songs.length; x++)
{
if((artist.match(songs[x]))==true)
{
query[x]=songs[x];
}
}
return query;
}
spero che qualcuno riesca a farmi capire dove sto sbagliando
Cordiali saluti
p.