Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

[java] - Utilisation du package java.lang.ref Reference, ReferenceQueue & co

wox-xion

Posted 14 August 2005 - 02:59 PM

Voilà, j'ai cherché comment passer des références à travers des fonctions... pour pouvoir modifier ces dernières depuis une fonction et ne pas avoir à les retourner sous forme d'un tableau d'objet (c'est pas très beau).
Je suis tombé sur java.lang.ref.Reference.

En lisant un peu la documentation, ça me paraît être ce dont j'ai besoin, mais je n'ai trouvé nullepart un exemple d'utilisation.
Le web est vide ou quoi, aucune référence à Reference ? icon_mrgreen.gif

Si quelqu'un pouvait m'expliquer le fonctionnement de ce package, ça serait super icon_biggrin.gif
Surtout que j'ai beau faire des essais, ça ne doit pas fonctionner comme je pense.

- la création de référence, c'est beau, mais ça se fait tout simplement par passer d'un objet en argument lors de l'instanciation d'un objet Reference ?
- et après, on fait quoi avec cette référence ? on l'utilise à la place lors d'un passage en argument par exemple ?
- j'ai cru comprendre que l'on pouvait les récupérer via un objet ReferenceQueue... bas moi il est toujours vide.... poll() me renvoie à chaque fois null... icon_neutral.gif

Je n'ai pas du tout compris son utilisation, alors si vous pouviez m'éclairer, s'il vous plaît, j'en serais très heureux. wink.gif


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Autres réponses dans ce sujet

liguorien

Posted 14 August 2005 - 04:03 PM

salut,

Citation :
Voilà, j'ai cherché comment passer des références à travers des fonctions


mmm, t'as essayé d'envoyer ton objet à une méthode ? icon_mrgreen.gif

Plus sérieusement, ça se fait tout seul, c'est comme en AS2. Je vais essayer de faire une explication mais je n'ai jamais réussi à être clair sur ce coup là icon_razz.gif

À la base, en Java tout est passé par valeur, c'est à dire que la méthode recois une copie de ce qui a été envoyé.

Si tout est passé par valeur, alors comment modifier l'objet original ???

La réponse est simple, en Java, nous n'avons aucun accès direct à une instance. Nous devons impérativement passé par une référence. Par exemple :

Code
Toto maReference = new Toto();
Toto monAutreReference = maReference;


L'instance en question est "new Toto()" mais je ne la manipule jamais directement. Je dois passer par une référence (qui ne fait que quelques octets en mémoire). Lorsque j'assigne maReference à [/i]monAutreReference], l'instance de Toto reste toujours la même. Je ne fais que créer une nouvelle référence.

Donc si j'envoi maReference à une méthode, une copie de la référence sera faite mais les 2 pointeront sur la même instance.


Pour ce qui est du package java.lang.ref, c'est du bas niveau, si tu ne comprends pas le but de ce package c'est que tu n'en a pas réellement besoin smile.gif

bye smile.gif

wox-xion

Posted 14 August 2005 - 07:23 PM

Il suffit de faire ce que je pensais être une copie et qui n'en étais pas une ? icon_biggrin.gif
Mon dieu, bas, oui, c'est plus que je ne pouvais le penser... merci wink.gif

Dommage que le bas niveau soit si peu accessible icon_neutral.gif

wox-xion

Posted 14 August 2005 - 08:28 PM

bon, bas je me rends compte que c'est super dans certains cas... mais comment copier un objet ?

si on veut faire une copie d'un objet, il suffit qu'il implémente clonable et on peut alors utiliser sa méthode clone()... mais cela crée-t-il bien un autre objet ou une référence ?

edit :
liguorien (Aug 14 2005, 05:03 PM) a dit :
...
Donc si j'envoi maReference à une méthode, une copie de la référence sera faite mais les 2 pointeront sur la même instance.
Pour ce qui est du package java.lang.ref, c'est du bas niveau, si tu ne comprends pas le but de ce package c'est que tu n'en a pas réellement besoin smile.gif

bye smile.gif
Voir le message




bon, bas petit test :

ActionScript
/**
* @param args the command line arguments
*/

public static void main(String[] args) {
// TODO code application logic here
StringBuilder value = new StringBuilder().append("Avant");
modify(value);
System.out.println(value.toString());

}
public static void modify(StringBuilder tomod){
tomod.append(" ou après");
}


Oui, ça marche, mais j'ai du utiliser StringBuilder...
Si j'utilise String (qui n'est pas un type natif (j'entends pas la un objet genre int, float, boolean, ... il y en a beaucoup ou c'est tout ?) pourtant), l'affectation via le signe "=" détruit la référence ? en tout cas ça a l'air... icon_wink.gif

Y a-t-il moyen d'avoir des références pour les types natifs ou la solution est bien l'utilisation des classes équivalentes ?

En fait, lorsque j'ai une référence, l'utilisation du signe "=" suivi d'un objet détruit la référence, et la remplace par l'objet présent... je suis juste ou de travers ? icon_rolleyes.gif

liguorien

Posted 14 August 2005 - 10:02 PM

Le String est un cas spécial... C'est un objet immutable, c'est à dire qu'une fois créé, il ne peut être modifié. Regarde dans la javadoc, c'est expliqué :

http://java.sun.com/...ang/String.html


Pour ce qui est des types primitifs :
http://www.idevelopm...tive_Types.html

smile.gif

wox-xion

Posted 15 August 2005 - 11:45 AM

primitif et pas natif icon_redface.gif

en tout cas merci beaucoup pour les liens icon_smile.gif

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet