projet1 méthode clone()
Page 1 sur 1 • Partager •
projet1 méthode clone()
bonjour à tous
j'ai un problem avec la méthode
protected Object clone ()
[code]
protected Object clone() {
Pion[][] copiePlateau = plateau.clone();
Joueur unJoueurCourant = joueurCourant.clone();
Joueur unJoueurGagnant = joueurGagnant.clone();
Joueur[] lesJoueurs = joueurs.clone();
Etat copie = new Etat(copiePlateau,unJoueurCourant,unJoueurGagnant,lesJoueurs);
return copie;
[code]
quand je le compile il me donne érreur message
[code]
Etat.java:89: clone() has protected access in java.lang.Object
Joueur unJoueurCourant = joueurCourant.clone();
^
Etat.java:89: incompatible types
found : java.lang.Object
required: gxxxxx.projet1.Joueur
Joueur unJoueurCourant = joueurCourant.clone();
^
Etat.java:90: clone() has protected access in java.lang.Object
Joueur unJoueurGagnant = joueurGagnant.clone();
^
Etat.java:90: incompatible types
found : java.lang.Object
required: gxxxxx.projet1.Joueur
Joueur unJoueurGagnant = joueurGagnant.clone();
^
Note: /home/my/gxxxxx/projet1/Position.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
4 errors
[/code]
donc je fait un casting
[code]
protected Object clone() {
Pion[][] copiePlateau = plateau.clone();
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
Joueur[] lesJoueurs = joueurs.clone();
Etat copie = new Etat(copiePlateau,unJoueurCourant,unJoueurGagnant,lesJoueurs);
return copie;
[/code]
il m'affiche encore érreur
[code]
Etat.java:89: clone() has protected access in java.lang.Object
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
^
Etat.java:90: clone() has protected access in java.lang.Object
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
^
Note: /home/my/gxxxx/projet1/Position.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors
[code]
merci d'avance
j'ai un problem avec la méthode
protected Object clone ()
[code]
protected Object clone() {
Pion[][] copiePlateau = plateau.clone();
Joueur unJoueurCourant = joueurCourant.clone();
Joueur unJoueurGagnant = joueurGagnant.clone();
Joueur[] lesJoueurs = joueurs.clone();
Etat copie = new Etat(copiePlateau,unJoueurCourant,unJoueurGagnant,lesJoueurs);
return copie;
[code]
quand je le compile il me donne érreur message
[code]
Etat.java:89: clone() has protected access in java.lang.Object
Joueur unJoueurCourant = joueurCourant.clone();
^
Etat.java:89: incompatible types
found : java.lang.Object
required: gxxxxx.projet1.Joueur
Joueur unJoueurCourant = joueurCourant.clone();
^
Etat.java:90: clone() has protected access in java.lang.Object
Joueur unJoueurGagnant = joueurGagnant.clone();
^
Etat.java:90: incompatible types
found : java.lang.Object
required: gxxxxx.projet1.Joueur
Joueur unJoueurGagnant = joueurGagnant.clone();
^
Note: /home/my/gxxxxx/projet1/Position.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
4 errors
[/code]
donc je fait un casting
[code]
protected Object clone() {
Pion[][] copiePlateau = plateau.clone();
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
Joueur[] lesJoueurs = joueurs.clone();
Etat copie = new Etat(copiePlateau,unJoueurCourant,unJoueurGagnant,lesJoueurs);
return copie;
[/code]
il m'affiche encore érreur
[code]
Etat.java:89: clone() has protected access in java.lang.Object
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
^
Etat.java:90: clone() has protected access in java.lang.Object
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
^
Note: /home/my/gxxxx/projet1/Position.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors
[code]
merci d'avance

didi- Nombre de messages: 205
Prénom: Dinesh
Statut:
Date d'inscription: 21/01/2009
Re: projet1 méthode clone()
protected Object clone() {
Pion[][] copiePlateau = plateau.clone();
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
Joueur[] lesJoueurs = joueurs.clone();
Etat copie = new Etat(copiePlateau,unJoueurCourant,unJoueurGagnant,lesJoueurs);
return copie;
Je ne sais pas quel est l'énoncé, mais :
- pourquoi protected ? Si c'est une méthode "à toi" (utilisée en interne), private suffit, non ?
- pourquoi dire qu'elle retourne un Object ? A tous les coups tu retournes un Etat, donc autant être plus spécifique et dire qu'elle retourne un Etat.
Cela pourrait également résoudre les erreurs citées. Le compilateur n'est pas toujours très précis, mais ici il pointe les deux bouts de code qui est sont en tort, un peu d'anglais suffit généralement à trouver ce qui cloche
PS: si ton projet/dossier est vraiment nommé "gxxx", renomme-le avec ton numéro d'étudiant, histoire que le prof qui va corriger le code sache à qui il a affaire

Jhon- Nombre de messages: 195
Age: 24
Prénom: Jonathan
Statut: 3R12
Localisation: 50.879858N,4.34801E
Date d'inscription: 23/09/2008
Re: projet1 méthode clone()
Jhon a écrit:protected Object clone() {
Pion[][] copiePlateau = plateau.clone();
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
Joueur[] lesJoueurs = joueurs.clone();
Etat copie = new Etat(copiePlateau,unJoueurCourant,unJoueurGagnant,lesJoueurs);
return copie;
Je ne sais pas quel est l'énoncé, mais :
- pourquoi protected ? Si c'est une méthode "à toi" (utilisée en interne), private suffit, non ?
- pourquoi dire qu'elle retourne un Object ? A tous les coups tu retournes un Etat, donc autant être plus spécifique et dire qu'elle retourne un Etat.
en java, clone ne peut être une méthode "à lui" !

_________________
Re: projet1 méthode clone()
didi a écrit:
- Code:
Etat.java:89: clone() has protected access in java.lang.Object
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
^
Etat.java:90: clone() has protected access in java.lang.Object
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
^
Note: /home/my/gxxxx/projet1/Position.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors
merci d'avance
Tu es dans le même package que la classe Joueur ? Si oui, je ne vois pas comme ça, si non, la méthode clone de joueur t'es inaccessible..
Wark- Nombre de messages: 674
Age: 24
Prénom: Cédric
Statut: Diplômé 2010
Localisation: Braine l'alleud
Date d'inscription: 04/02/2008
Re: projet1 méthode clone()
Je ne comprend pas très bien la méthode clone. J'ai posé plusieurs fois la question et on m'as répondu qu'elle fait une copie de l'objet courant.
Mais quand on n'est dans l'objet tous ces attributs sont courant.
Mais quand on n'est dans l'objet tous ces attributs sont courant.

DjMan42- Nombre de messages: 219
Prénom: Eden
Statut: Etudiant 1er Indu
Localisation: Bruxelles
Date d'inscription: 28/10/2008
Re: projet1 méthode clone()
DjMan42 a écrit:Je ne comprend pas très bien la méthode clone. J'ai posé plusieurs fois la question et on m'as répondu qu'elle fait une copie de l'objet courant.
Mais quand on n'est dans l'objet tous ces attributs sont courant.
Elle retourne une copie de l'object auquel elle appartient.
Pour simplifier, c'est la même représentation (attributs avec les mêmes valeurs, etc..) mais stockés à des endroits différents en mémoire. Ainsi, si tu supprimes l'objet de base (cas d'un tableau ou d'une map), sa copie est "safe".
Bon, pour tout compliquer, on rajoute le garbage collector et tout les petites joyeusetés de Java.
Wark- Nombre de messages: 674
Age: 24
Prénom: Cédric
Statut: Diplômé 2010
Localisation: Braine l'alleud
Date d'inscription: 04/02/2008
Re: projet1 méthode clone()
Wark a écrit:DjMan42 a écrit:Je ne comprend pas très bien la méthode clone. J'ai posé plusieurs fois la question et on m'as répondu qu'elle fait une copie de l'objet courant.
Mais quand on n'est dans l'objet tous ces attributs sont courant.
Elle retourne une copie de l'object auquel elle appartient.
Pour simplifier, c'est la même représentation (attributs avec les mêmes valeurs, etc..) mais stockés à des endroits différents en mémoire. Ainsi, si tu supprimes l'objet de base (cas d'un tableau ou d'une map), sa copie est "safe".
Bon, pour tout compliquer, on rajoute le garbage collector et tout les petites joyeusetés de Java.
cette réponse de Wark est très imprécise.
par objet courant, "on" a voulu te parler de l'objet appelant, celui qui invoque la méthode.
clone sert à dupliquer un objet. l'objet retourné est une copie de celui dont la méthode clone est appelée sauf que les attributs références du clone sont différents de ceux de l'original : ils ne pointent pas vers les mêmes objets mais vers de copies des objets attributs de l'original (le méthode clone d'un objet doit donc appeler récursivement les méthodes clone de ses attributs). on parle de copie profonde de l'objet.
lorsque Wark évoque la suppression de l'objet de base, il se trompe, dans la mesure où c'est impossible en java si une copie réfère également cet objet. ce qu'il a probablement voulu dire c'est que si tu modifies (ou supprimes) les objets qui sont attributs de l'original, les attributs du clone ne sont pas modifiés. ils correspondent à une duplication de ceux de l'original au moment du clonage, puis ils vivent chacun leur propre vie.
plus d'infos sur le clonage en java, ici, où il est donné un exemple de clone qui réalise une copie surficielle, ce qui risque de troubler

_________________
Re: projet1 méthode clone()
Bien plus "caché" comme implémentation qu'en C++... Mais on t'en parlera donc plus en profondeur quand tu verras le C++ et tu comprendras vraiment ce qui est copié et comment... et les pièges dans lequel il ne faudra pas tomber 
Anthoblack- Nombre de messages: 764
Age: 24
Prénom: Anthony
Statut: Ex-étudiant
Localisation: Bruxelles
Date d'inscription: 11/03/2008
Re: projet1 méthode clone()
Un grand merci à tous. Je comprend à présent.

DjMan42- Nombre de messages: 219
Prénom: Eden
Statut: Etudiant 1er Indu
Localisation: Bruxelles
Date d'inscription: 28/10/2008
Re: projet1 méthode clone()
[quote="nvs"]
lorsque Wark évoque la suppression de l'objet de base, il se trompe, dans la mesure où c'est impossible en java si une copie réfère également cet objet. ce qu'il a probablement voulu dire c'est que si tu modifies (ou supprimes) les objets qui sont attributs de l'original, les attributs du clone ne sont pas modifiés. ils correspondent à une duplication de ceux de l'original au moment du clonage, puis ils vivent chacun leur propre vie.
/quote]
Oui oui, d'où j'ai parlé du garbage collector (sans redéfinir sa fonction). Ceci dit, j'aurais effectivement dû prendre la modification en exemple. :-)
lorsque Wark évoque la suppression de l'objet de base, il se trompe, dans la mesure où c'est impossible en java si une copie réfère également cet objet. ce qu'il a probablement voulu dire c'est que si tu modifies (ou supprimes) les objets qui sont attributs de l'original, les attributs du clone ne sont pas modifiés. ils correspondent à une duplication de ceux de l'original au moment du clonage, puis ils vivent chacun leur propre vie.
/quote]
Oui oui, d'où j'ai parlé du garbage collector (sans redéfinir sa fonction). Ceci dit, j'aurais effectivement dû prendre la modification en exemple. :-)
Wark- Nombre de messages: 674
Age: 24
Prénom: Cédric
Statut: Diplômé 2010
Localisation: Braine l'alleud
Date d'inscription: 04/02/2008
Re: projet1 méthode clone()
Ce lien n'est pas mal non plus ...
http://ydisanto.developpez.com/tutoriels/j2se/cloneable/
http://ydisanto.developpez.com/tutoriels/j2se/cloneable/
_________________
PbT qui conseille la lecture de smartq.namok.be, la faq aussi pq pas.
Pour papoter ensemble, rdv sur IRC, irc.freenode.net #esi ou via Jabber esi@chat.jabberfr.org
Mon style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

Re: projet1 méthode clone()
... et une p'tite note sur mon blog à ce sujet.
_________________
PbT qui conseille la lecture de smartq.namok.be, la faq aussi pq pas.
Pour papoter ensemble, rdv sur IRC, irc.freenode.net #esi ou via Jabber esi@chat.jabberfr.org
Mon style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum