pumbaa666
Messages postés24Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention19 janvier 2010
-
15 déc. 2007 à 13:36
Utilisateur anonyme -
15 déc. 2007 à 19:27
Bonjour, j'ai un gros problème, j'essaye de
faire une méthode générique qui clone en profondeur une ArrayList (donc
qui clone chaque objet, pas seulement la liste elle-même) mais je
n'arrive pas à le faire "proprement".
Voici une partie de mon programme :
/* L'interface */
public interface MyClonable
{
public MyClonable myClone();
}
/* La classe qui implémente l'interface */
public class Process implements MyClonable
{
public Process(Process source)
{
/* bla bla */
}
public Process myClone()
{
return new Process(this);
}
}
/* La méthode de clonage proprement dite */
public class Tools
{
public static ArrayList<MyClonable> deepClone(ArrayList<MyClonable> source)
{
ArrayList<MyClonable> clone = new ArrayList<MyClonable>(source.size());
for(MyClonable o:source)
clone.add(o.myClone());
return clone;
}
}
/* L'utilisation */
ArrayList<MyClonable> listSource = {...}; // Elle est déjà pleine
/* Problème : le compilateur me retourne : "The method
deepClone(ArrayList<MyClonable>) in the type Tools is not
applicable for the arguments (ArrayList)"*/
Et je ne comprends pas du tout pourquoi. Avec un pote nous avons essayé de nombreuses idées, mais rien ne marche.
De tête nous avons testé :
- un casting : ArrayList listProcess =
Tools.deepClone((ArrayList<MyClonable>)listProcess); -->
Erreur, impossible de caster
- définir autrement le prototype de la méthode de clonage : public
static ArrayList<? extends MyClonable> deepClone(ArrayList<?
extends MyClonable> source) --> Erreur, Type mismatch: cannot
convert from ArrayList<capture#1-of ? extends MyClonable> to
ArrayList
- plein d'autres trucs.
Le seul qui marche, c'est de ne mettre nul part le type de la collection : public static ArrayList deepClone(ArrayList source)
mais ça me met des warning partout (dans le prototype de la fonction, et dans son appel.
pumbaa666
Messages postés24Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention19 janvier 2010 15 déc. 2007 à 19:22
J'ai cité 3 erreurs, tu me parles de laquelle ?
Si c'est de la 1ère, je ne vois pas le problème. Une ArrayList d'interface ça ne peut pas exister, il le prend forcément comme une ArrayList d'objet respectant cette interface.