Bonjour amis développeurs.

Je me pose des questions à propos de l'utilisation de types générique avec les Enum. Mon code fonctionne correctement mais il y a des warnings que je n'arrive pas a comprendre.

J'ai une classe Parameter generique qui contient les méthodes setValue et getValue paramétrées
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
17
 
public class Parameter<T> 
{
        //...  des truc avant
 
        public void setValue(final T _value)
	{
		value = _value;
	}
 
        synchronized public T getValue()
	{
		 return value;
	}
 
       //...  des truc après
}
J'ai créé une classe EnumParameter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
public class EnumParameter<T extends Enum<T>> extends Parameter<T>
{
        public EnumParameter(final Class<T> _enumType)
	{
           super(_enumType);
           ...
        }
}
Je créé deux EnumParameter avec deux types d'Enum différents que j'ajoute dans une map. Comme ceci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
{
     ...
     EnumParameter<Enum1> parameter1 = new EnumParameter<>(Enum1.class);
     EnumParameter<Enum2> parameter2 = new EnumParameter<>(Enum2.class);
 
     parameter1.setValue(Enum1.TRUC);
     parameter2.setValue(Enum2.MACHIN);
 
     parametersMap.put(parameter1ID, parameter1);
     parametersMap.put(parameter2ID, parameter2);
     ...
}
Plus tard je veux récupérer par exemple la valeur de parameter1 pour l'assigner a un autre EnumParameter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
    final EnumParameter<Enum1> parameter1 = (EnumParameter<Enum1>)getParameter(parameter1ID); // WARNING : Type safety: Unchecked cast from Parameter<capture#31-of ?> to EnumParameter<Enum1>
    final EnumParameter<Enum1> parameter3 = (EnumParameter<Enum1>)getParameter(parameter3ID); // WARNING : Type safety: Unchecked cast from Parameter<capture#31-of ?> to EnumParameter<Enum1>
    parameter3.setValue(parameter1 .getValue());
Mis à part le warning ça fonctionne.

J'ai essayé de résoudre le warning avec <?>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
    final EnumParameter<?> parameter1 = (EnumParameter<?>)getParameter(parameter1ID); // Plus de warning
    final EnumParameter<?> parameter3 = (EnumParameter<?>)getParameter(parameter3ID); // Plus de warning
    parameter3.setValue(parameter1 .getValue()); // ERREUR : The method setValue(capture#35-of ?) in the type Parameter<capture#35-of ?> is not applicable for the arguments (capture#36-of ?)
Je comprends l'erreur puisque le paramètre est de type EnumParameter<?> et j'essaie de luis passer un parametre de type Enum1.
Et donc comment éviter le Unchecked cast warning dans ce cas si c'est possible.

Merci d'éclairer ma lanterne.