[Java5] Types énumérés et analyse syntaxique
Bonjour à tous,
Je cherche à rendre générique le fait d'analyser des fichiers plats permettant de valoriser plusieurs énumérations dont la forme serait :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
public enum InformationFonctionnelle1
{
PREMIERE_VALEUR ("texte1"),
DEUXIEME_VALEUR ("texte2");
private static Map<String, InfiormationFonctionnelle1> associations;
// Avec le constructeur qui va bien et la méthode statique permettant de récuperer l'énumération en fct de la chaine de caractères
// Méthode qui ressemble à ceci :
public static InformationFonctionnelle1 deChaine (String chaine)
{
return associations.get(chaine);
}
} |
Ma problématique est que j'ai une douzaine d'énumérations de ce type et une structure d'analyseur syntaxique à reprendre.
L'analyse syntaxique de mon projet se fait notamment par le biais de classes réalisant l'interface suivante :
Code:
1 2 3 4 5
|
public interface Champ<T>
{
T parse(final String value) throws ParseurException;
} |
dont on a par exemple la réalisation suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public class ChampInteger implements Champ<Integer>
{
public Integer parse(final String champ) throws ParseurException {
if (StringUtils.isNotBlank(champ)) {
try {
return Integer.parseInt(StringUtils.trim(champ));
} catch (final NumberFormatException e) {
throw new ParseurException("Le champ " + champ + " n'est pas un nombre entier");
}
}
return null;
}
} |
Mon souhait serait d'ajouter une classe ChampEnum<E extends Enum<E>> réalisant le contrat Champ<E extends Enum<E>> (ou plus précisément la même chose où désigne une des quelques énumérations m'intéressant).
Je pensais d'abord mettre en place une interface réalisée par mes énums pour y placer la méthode deChaine... mais étant une méthode statique, ça ne risque pas de fonctionner.
J'ai beau tourner le problème dans tous les sens, je n'arrive pas à trouver une manière de spécifier de façon générique un type disposant d'une méthode statique deChaine(String)
Quelqu'un aurait-il une suggestion ?
Parce que là, je suis à quelques doigts de passer par des conversions explicites type par type :( ... ce que j'apprécierais d'éviter par soucis de maintenance.