2010-05-06 4 views
-1

Good Evening,L'identification d'une classe qui étend une classe abstraite

Je fais une modification majeure de http://wiki2xhtml.sourceforge.net/ pour finalement obtenir une meilleure vue d'ensemble et maintenabilité. (J'ai commencé le projet lorsque j'ai décidé de commencer la programmation, si – vous obtenez, à droite,?))

En ce moment je me demande comment résoudre le problème que je vais vous décrire maintenant:

Chaque fichier sera être mis à travers plusieurs parseurs (comme un des liens, une pour les tables, une pour les images, etc.):

public class WikiLinks extends WikiTask { ... } 
public class WikiTables extends WikiTask { ... } 

Les fichiers seront ensuite analysée de cette façon:

public class WikiFile { 
... 
public void parse() { 
    //Run all parsers on this file. 
    if (!parse) return; 
    WikiTask task = new WikiLinks(); 
    do { 
     task.parse(this); 
    } while ((task = task.nextTask()) != null); 
} 
} 

Parfois, je peux vouloir utiliser aucun analyseur (pour les fichiers qui ont seulement besoin d'être copiés), ou seulement un analyseur choisi (par ex. à des fins de test). Donc, avant d'exécuter task.parse(), j'ai besoin de vérifier si cet analyseur est réellement nécessaire/désiré. (Peut-être via Blacklist ou Whitelist.)

Que suggéreriez-vous pour la comparaison? Un identifiant pour chaque WikiTask (comment faire?)? Comparaison de la tâche Object elle-même avec une nouvelle instance d'une WikiTask (overhead)?

Répondre

0

Je suis désolé mais je n'ai pas vraiment l'idée de votre fonction d'analyse. Si vous ne souhaitez pas utiliser un analyseur, définissez parse sur false? :) Si j'essaie de deviner ce que vous voulez ... Je voudrais simplement utiliser une énumération. Vos tâches pourraient contenir un ParserType type;, donc vous pourriez faire ça. comme if(task.getParserType() == this.getParserType()) { task.parse(this) } Vous devez sûrement utiliser une liste si vous voulez des parseurs différents pour une certaine tâche. Cordialement.

+0

Oui, pas d'analyse du tout fonctionne déjà. Exécuter seulement certains parseurs ne fonctionne pas encore. - Désolé de ne pas être clair, la fonction parse() que j'ai décrite ci-dessus ne fait pas partie d'une WikiTask, mais d'un objet File. Appeler parse() sur l'objet WikiFile exécute tous les analyseurs disponibles tant qu'il y en a un suivant (j'utilise task.nextTask() car l'ordre est important). - Utiliser une énumération pour identifier les analyseurs pourrait être la solution la plus simple, car ils sont aussi légers. –

Questions connexes