Con il codice sottostante relativo al thread, vedo che l'autore di Thread class nasconde i dettagli sul funzionamento del metodo start() . Quello che un utente della classe Thread deve sapere è che class Thread si aspetterebbe un pezzo del suo codice che sarà un'istanza della sottoclasse concreta anonima di Runnable che viene superata.
/* TestThread.java */
public class TestThread{
public static void main(String[] args){
Thread threadObject = new Thread(new Runnable(){
public void run(){
/* your own code that has to run*/
System.out.println("a new thread");
}
});
threadObject.start();
System.out.println("Main thread");
}
}
Ma in questo sotto programma, sembra che nascondiamo parzialmente i dettagli di implementazione del metodo listFiles(filter) . Perché se l'autore deve cambiare la logica di listFiles(filter) in futuro senza influenzare gli utenti, deve assicurarsi che la firma del metodo boolean accept(File dir, String name); non venga influenzata.
/* ListDirectoryWithFilter.java */
import java.io.File;
import java.io.FilenameFilter;
public class ListDirectoryWithFilter{
public static void main(String[] args){
String path = System.getProperty("user.home") + File.separator + "workspace" +
File.separator + "JavaCode" + File.separator + "src";
File dir = new File(path);
if(dir.isDirectory()){
File[] files = dir.listFiles(new FilenameFilter(){
public boolean accept(File dir, String file){
return file.endsWith(".java");
}
});
for(File file : files){
System.out.println(file.getName());
}
}
}
}
Pensi che sarebbe stato meglio che il metodo listFiles(filter) aspettasse solo un'espressione regolare ( *.java ) da parte dell'utente e il resto è il risultato che l'utente si aspetta?
Sembrava un approccio un po 'inutile per me, per implementare un metodo di due argomenti accept(,) e poi passarlo al metodo listFiles() .
Quindi, tali implementazioni sono una buona pratica? Se sì, quando pensiamo a tali implementazioni?