Salut,

Envoyé par
®om
Dans ce cas, tu ne peux pas éviter ceci, car une désérialisation ne peut pas te garantir que tu récupères bien une ArrayList<RangementDossier> (imagine tu charges une ArrayList<Integer>, ça marchera quand même, ce qui pose problème).
+1 : le cast marchera puisque le type Generics est perdu à la compilation, mais par contre cela te génèrera une exception un peu plus loin lorsque tu tenteras d'utiliser ta liste... Bref cela peut casser le principe des Generics (un typage sûr) d'où le warning...

Envoyé par
®om
Il faut juste rajouter devant ta méthode un @SuppressWarnings("unchecked")
Attention toutefois à @SuppressWarnings qui ne doit pas être utilisé de manière abusive, et plus généralement il faut éviter de le placer devant une "grosse" méthode afin d'éviter les effets de bord (d'autre erreur du même style qui passerait inaperçu).
Perso dans ce cas j'utilise cette méthode :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| /**
* Cast non sécurisé.<br/>
* Cette méthode permet de caster des types non-paramétré en
* type paramétré.<br/>
* Exemple :
* {@code List<String> list = uncheckedCast( maListeNonParamétré ); }
* <br/>
* <b>Attention :</b> cela peut avoir des effets de bords
* indésirables si la référence en paramètre ne respectent
* pas le type paramétré !
*
* @param <P> Type du paramètre de la méthode.
* @param <R> Type de la valeur de retour.
* @param p Paramètre à "caster".
* @return La référence 'p', castée dans le type de R.
* @throws ClassCastException en cas de type incompatible.
*/
@SuppressWarnings("unchecked")
public static <P,R extends P> R uncheckedCast(P p) throws ClassCastException {
return (R) p;
} |
Exemple dans ton cas :
listeDossier = uncheckedCast( sortie.readObject() );
a++
Partager