J'ai créé un exemple pour présenter ma question.Transférer des fichiers en tant que paramètres
public class Algorithm
{
// This is the best, but circumstances prevent me from doing this.
/*public static void computeSomething(Data data)
{
// Compute some stuff
}*/
public static void computeSomething(DataFileReader reader) throws IOException
{
// Compute some stuff.
}
public static void computeSomething(File file) throws IOException, DataFormatException
{
DataFileReader = DataFileReaderFactory.newDataFileReader(file);
// Compute some stuff.
}
}
public class DataFileReaderFactory
{
private enum FileExtension { XML, UNSUPPORTED_EXTENSION }
private static final String XMLExtension = ".xml";
public static DataFileReader newDataFileReader(File file) throws DataFormatException
{
switch(computeFileExtension(file))
{
case XML : return new XMLFileReader(file);
default : throw new DataFormatException();
}
}
private static FileExtension computeFileExtension(File file)
{
if(file.getName().endsWith(XMLExtension))
return FileExtension.XML;
else
return FileExtension.UNSUPPORTED_EXTENSION;
}
}
Alors, je voudrais savoir si je dois définir mon interface pour prendre Fichiers, ou mes propres lecteurs de fichiers, qui vous garantissent que les données sont dans un format valide. Évidemment, je voudrais pouvoir prendre les données elles-mêmes en tant qu'objet Data, mais je suis limité à cet égard. La raison a à voir avec les données étant très grandes et moi devoir sérialiser pour plusieurs objets. Dans ce cas, il est plus pratique d'envoyer un chemin vers les données plutôt que les données elles-mêmes.
En tout cas, en ce qui concerne la question, je penche vers la méthode qui prend une instance de fichier Java, comme il semble plus général, mais je veux entendre votre avis. Merci!
Malheureusement, les flux ne sont pas sérialisables, ce qui est une exigence nécessaire pour l'algorithme. Pour le test et l'exécution locale, je vais probablement faire une version de l'algorithme comme celle que j'ai commentée dans l'exemple ci-dessus, qui permet de transmettre les données directement. –
VOTRE implémentation pourrait être sérialisable ... –