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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.