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?