[java]pas de pointeur ... on fait comment ?

Discussion dans 'Web, design' créé par dania の悪夢, 16 Janvier 2009.

Statut de la discussion:
Fermée.
  1. Offline
    Hello,

    ayant commencé a apprendre le java pas plus tard que samedi passé, je suis tombé sur un gros problème ... pas de POINTEURS ! or le pointeur fait tout :love: Donc la question est simple, comment fait-on pour s'en passer?

    Mais je vais donner un exemple de ce que je veux faire.

    Disons que j'ai une classe Poule qui fonctionne très bien.
    En fonction de certaines actions, je suis censé pouvoir créer de nouvelles poules régulièrement.
    Dans les autres languages comme le C, hop, un petit array de pointeurs vers des objets de type Poule, et on ajoute une Poule chaque fois qu'on en a besoin avec un index de remplissage et c'était fait. Pour tuer une poule, il suffisait d'appeler le destructeur de l'objet et de la supprimer dans le tableau. FACILE :cool:
    Mais en Java, pas de Pointeurs vers mes Poules, Pas possible non plus de définir un array of Poule:p du genre "Private Poule[] mesPoulets = new Poule[MaxPoules]" à partir de ma classe Poule (et de la classe String non plus, et ca aussi c'est mal).
    La question est donc, mais comment faire ? Existe-t-il une méthode cachée pour avoir et utiliser les pointeurs de ses objets ? Ou comment s'y prendre autrement (sans instancier 10000 objets de type Poule à la main) pour arriver a gérer ce nombre variable de Poule?
    Dans mes recherches j'ai trouvé des références à un truc qui s'appelle des "références" justement, mais ca ne semble pas pouvoir résoudre mon problème... Help Me.


    Après je vous demanderai des détails sur les java.AWT.event.* qui me posent un problème avec les textField car quand j'ai un TextField T1 qui réagit aux events, je ne trouve pas le moyen de détecter que c'est T1 himself qui a fait l'appel.
    Pourtant j'ai tout retourné pas mal de fois, mon TextChangedEvent(TextEvent txt) est bien appellé
    je fais donc un "Object source = txt.getSource();" et, d'après ce que j'ai compris de la doc, un simple "if (Source == T1)" et le code qui suit entre {} est exécute. Mais non, ça ne passe pas. Ou se trouve le truc qui cloche ? Pourtant un txt.toString() ressemble fortement à un T1.toString(); (encore heureux puisque ce sont censé être les mêmes objets).
    Ou se trouve mon erreur ?
    La seule solution (barbare et grotesque) serait de créer une classe par objet graphique. Mais bon, sa ne me tente pas de créer 50Objets sous prétexte que les évents soient bizarres (surtout que je risque d'avoir des choses plus complexe a faire au dessus de ca).

    Help ME | Tasukete kudasai | aidez moi

    dania.
    dania の悪夢, 16 Janvier 2009
    #1
  2. Offline
    zoheir cvm.mangaleet()
    tu devrais t'attaquer a un cours de java serieusement
    pour ton probleme de "tableau", utilise les generics, exmple:
    List<Poule> v = new ArrayList<String>();
    v.add(new Poule());
    zoheir, 16 Janvier 2009
    #2
  3. Offline
    mmmmh ... vais aller creuser sur cette piste :) merci ;)
    dania の悪夢, 16 Janvier 2009
    #3
  4. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    Enflure, pour une fois que je pouvais répondre à une question JAVA :-(
    Jereck, 16 Janvier 2009
    #4
  5. Offline
    zoheir cvm.mangaleet()
    lolol


    et investis également dans un cours awt

    et sinon: if(txt.getSource() == T1) ca marche?

    putain l'awt ca fait un bail :pfiou:
    zoheir, 16 Janvier 2009
    #5
  6. Offline
    non, justement ca marche pas le if(txt.getSource() == T1) ... après quelques autres recherches, les hashcodes sont différents. Peut être du aux passage des paramètre par valeur ?



    la je dois apprendre ce langage le plus vite possible donc les cours, c'est trouver ce qu'on a besoin le plus vite possible sans passer par les trucs inutiles :)
    dania の悪夢, 16 Janvier 2009
    #6
  7. Offline
    zoheir cvm.mangaleet()
    if((TextField)txt.getSource() == T1)
    ou
    if(txt.getSource().equals(T1))
    ?
    zoheir, 16 Janvier 2009
    #7
  8. Offline
    txt.getSource() est deja un TextField puisqu'il arrive a faire la comparaison (pas d'erreur sur les types) donc je ne pense pas que ca puisse résoudre quoi que ce soit (mais j'essayerai, promis | portable avec Eclipse loin de moi maintenant)

    Pour le .equals(T1) marche pas non plus
    dania の悪夢, 16 Janvier 2009
    #8
  9. Offline
    Maleki Pain in the ass !
    On parles bien d'un JTextField ici ?
    Cela t'indique true ou false dans la console ?
    Pourrais-tu mettre le code complet ?
    Maleki, 17 Janvier 2009
    #9
  10. Offline
    Tifox ou pas
    EDIT : j'ai rien dit, j'avais mal lu le problème
    Tifox, 17 Janvier 2009
    #10
  11. Offline
    null ose();
    J'ai pas le temps de m'attarder donc je réponds en vitesse.

    En Java les pointeurs sont gérés à ta place. Donc tu peux très bien faire ton tableau de poulettes et dès qu'un objet ne sera plus pointé, il sera supprimé de la mémoire de manière automatique par le GC (Garbage Collector).

    La seule façon de faire dans ton tableau de poulletes (pour supprimer une poule de la mémoire), ça serait de faire :

    mesPoulets[indice] = null;

    Mais cela risque de te faire des trous pour rien donc ce que zoheir a dit est la meilleure manière de procéder (plus de trous :)). Par contre, pour informations, Vector<T> est thread-safe.


    Ensuite le .equals() et le "==" sont différents pour des objets. En Java, tout les objets qui n'héritent pas, héritent en fait de la classe Object (et dans le cas de l'héritage, la classe mère héritera d'Object donc ça revient presque au même si il n'y a pas eu de surcharge). Pour le JTextField, je ne sais pas s'il compare le HashCode donc privilégie le test "==".

    Mais mystère pour ton problème d'évènements, à mon avis tu fais quelques choses de faux (désolé :oops:)

    J'espère que ça t'aidera un tout mini peu pour ton apprentissage. Bonne continuation !
    null, 18 Janvier 2009
    #11
  12. Offline
    Hello,

    après plusieurs test,
    les equals == ne marchent vraiment pas avec mes TextField (AWT, pas swing)
    les generics sont existants depuis la version 5 (trop recent pour ce que je fais)

    Bref, merci pour votre aide mais l'ai bien peur que le java ait l'honneur d'inaugurer ma liste des langage informatiques incomplets, ceux ou on simplifie tellement tout qu'on a plus acces a rien ...
    dania の悪夢, 19 Janvier 2009
    #12
  13. Offline
    Maleki Pain in the ass !
    Chez moi, sous AWT, la fonction que tu utilises s'appelle plutôt textValueChanged(TextEvent event) et le code est bien exécuté.
    PHP:
    textField.addTextListener(new java.awt.event.TextListener() {
         public 
    void textValueChanged(java.awt.event.TextEvent e) {
              
    Object source e.getSource();
                   if (
    source == textField) {
                        
    //code à exécuter...
                   
    }
         }
    });
    Maleki, 22 Janvier 2009
    #13
Statut de la discussion:
Fermée.