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

Statut
N'est pas ouverte pour d'autres réponses.
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.
 

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());
 
1er
OP
dania の悪夢
mmmmh ... vais aller creuser sur cette piste :) merci ;)
 

Jereck

Α & Ω
Staff
Enflure, pour une fois que je pouvais répondre à une question JAVA :-(
 

zoheir

cvm.mangaleet()
Enflure, pour une fois que je pouvais répondre à une question JAVA :-(
lolol


et investis également dans un cours awt

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

putain l'awt ca fait un bail :pfiou:
 
1er
OP
dania の悪夢
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 :)
 

zoheir

cvm.mangaleet()
if((TextField)txt.getSource() == T1)
ou
if(txt.getSource().equals(T1))
?
 
1er
OP
dania の悪夢
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
 

Maleki

Pain in the ass !
On parles bien d'un JTextField ici ?
code java a dit:
System.out.println(txt.getSource() == T1);
Cela t'indique true ou false dans la console ?
Pourrais-tu mettre le code complet ?
 

Tifox

ou pas
EDIT : j'ai rien dit, j'avais mal lu le problème
 

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 !
 
1er
OP
dania の悪夢
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 ...
 

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...
               }
     }
});
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut