Bonjour à tous,

Je suis confronté à un problème avec le passage des paramètres par valeur et référence, j'ai lu qu'il ne pouvait y avoir que ces 2 types de passage en java : pour les variables primitives => par valeur et pour el reste (les objets) => par références.

Mais mon problème survient lors de la sauvgarde des objets...

Je prends un exemple pour y voir plus clair :

Je créer une classe Piece (d'un jeu d'echec) qui aura les champs suivants (je ne décrit pas les méthode) :

-> boolean estBlanc;
-> int type;
-> JPanel image;

Ensuite je créer une classe qui permet de faire la sauvegarde dans un fichier, et je créer la méthode suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 public void save(Piece unePiece)
{
       // ici j'ajoute unePiece à une ArrayList qui est membre de la classe de sauvegarde
}
vu que unePiece est passé par référence, ce n'est qu'un alias qui est sauvegardé dans l'ArrayList, donc quand je récupère la sauvegarde, je ne récupère que des valeurs nulls.

Même en faisant cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 public void save(Piece unePiece)
{
       Piece p = unePiece;
       // ici j'ajoute p à une ArrayList qui est membre de la classe de sauvegarde
}
Cela ne fonctionne pas, car p est aussi un alias de unePiece.

Et je suis forcé de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
public void save(Piece unePiece)
{
       Piece p = new Piece();
       p.estBleu = unePiece.estBleu;
       p.type = unePiece.type;
       p.image = unePiece.image;
       // ici j'ajoute p à une ArrayList qui est membre de la classe de sauvegarde
}
et là ça focntionne bien.

Donc ma question est simple, suis-je à chaque fois obligé de recopier chaque champ de ma classe pour pouvoir faire la sauvegarde, ou est ce qu'il existe un moyen plus rapide pour faire uen sauvegarde non pas de l'alias ou de la référence mais de l'objet en lui même.

Merci pour vos réponses et bravo à ceux qui se sont lancé dans cette lecture^^