Help ! Cas d'école, mais casse tête quand même.

lyvunny
Help ! Cas d'école, mais casse tête quand même.

Bonjour, j'ai un cas d'école qui me rend perplexe. Je suis en train de lire JAVA 6 - Sam's teach yourself in 24 days. Au chapitre 5, j'ai le code suivant, que j'ai simplifié :

Public class box { int x; int y; int z;

box proc1(int x, int y, int z)
{
this.x=x;
this.y=y;
this.z = z;
return this;
}

public void main (String [] argv)
{ box MyBox = new box();
MyBox.proc1(22, 17, 31);
}

Ma question est : pourquoi cette procédure renvoie l'objet de type box ? Est-ce la référence à l'instance MyBox ? Si MyBox est appelé comme ci-dessus, quelle est l'utilité de la fonction de renvoyer une référence à l'instance Box.

Le livre ne répond pas à ces questions. Je pense qu'il a voulu mettre l'accent sur le fait que les variables de la procédure peuvent porter le même nom que les variables d'instance, et ainsi il montre l'utilisation du mot-clé this.

Selon moi, la fonction proc1 pouvait retourner void, et le return this est inutile.

Merci de votre aide
Vunny

fredericmazue
Re: Help ! Cas d'école, mais casse tête quand même.

Bonjour,

Quote:
pourquoi cette procédure renvoie l'objet de type box ? Est-ce la référence à l'instance MyBox ?

Oui c'est la référence courante du box
Au fait, procédure n'est pas le bon terme. EN Java on préfère dire "méthode"

Quote:
Le livre ne répond pas à ces questions. Je pense qu'il a voulu mettre l'accent sur le fait que les variables de la procédure peuvent porter le même nom que les variables d'instance, et ainsi il montre l'utilisation du mot-clé this.

Que les variables passées à la méthode tu veux dire. Oui effectivement ici this sert à ça.

Quote:
Selon moi, la fonction proc1 pouvait retourner void, et le return this est inutile.

Totalement inutile en effet, puisque celui qui peut appeler cette méthode proc1 détient déjà une référence sur l'instance. Et oui, ça devrait retourner void.
retourner this n'aurait de sens que si proc1 retournait un nouvel objet. Par exemple:

box proc1(int x, int y, int z)
{
return new box(x, y, z);
}