Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme de newbie

11 réponses
Avatar
Schlum
Est-il possible (et si oui comment) d'appeler une méthode d'un objet a
partir d'une variable ?

Je m'explique :
disons que j'ai une classe A avec deux méthodes setCeci et setCela
si je stocke dans une variable (genre une String maVar) une des deux
valeurs setCeci ou setCela, y a t il un moyen de faire quelque chose qui
ressemblerait a :

A.maVar() et que ca appeller A.setCeci ou A.setCela suivant la valeur de
maVar

Je seche, ca fait 1 heure que je cherche sur google mais je suis pas
capable d'exprimer mon problème avec les mots qui vont bien....

Merci d'avance,
Schlum

10 réponses

1 2
Avatar
Raphael Tagliani
Class A {
private int valeur;
A(int valeur)
{
// this.valeur fait référence au champ de l'objet
// alors que valeur fait référence au paramètre passé au
// constructeur
this.valeur = valeur;
}
public void printVal()
{
System.out.println(this.valeur);
}
}

Class Tester {
public static void main(String[] args)
{
// création des objets, en leur passant la valeur // initiale en
paramètre
A a0 = new A(0);
A a1 = new A(1);

// affichage de la valeur selon l'objet
a0.printVal();
a1.printVal();
}
}

Je n'ai pas compilé, mais ça devrait fonctionner.
J'espère avoir bien compris la question...
Ta 'variable' ici sera a0 ou a1, il s'agit d'un objet (une réalisation
ou instance de la classe A).
Tant que ta méthode n'est pas déclarée 'static', c'est bien celle de
l'objet qui est appellée.

Schlum wrote:
Est-il possible (et si oui comment) d'appeler une méthode d'un objet a
partir d'une variable ?

Je m'explique :
disons que j'ai une classe A avec deux méthodes setCeci et setCela
si je stocke dans une variable (genre une String maVar) une des deux
valeurs setCeci ou setCela, y a t il un moyen de faire quelque chose qui
ressemblerait a :

A.maVar() et que ca appeller A.setCeci ou A.setCela suivant la valeur de
maVar

Je seche, ca fait 1 heure que je cherche sur google mais je suis pas
capable d'exprimer mon problème avec les mots qui vont bien....

Merci d'avance,
Schlum


Avatar
jeje900ss
Salut

Schlum wrote:
Est-il possible (et si oui comment) d'appeler une méthode d'un objet a
partir d'une variable ?



Moi j'utiliserai la "Réflexion" de Java.
Un truc du style :

this.getClass().getMethod("", new Class[]).invoke(...)

Je pense que tu dois pouvoir trouver pas mal d'exemple sur internet avec
les mot clef Introspection, Reflexion

Jérôme

Avatar
Schlum
Merci bcp pour ta reponse.

Je ne crois pas que ca corresponde.

En fait voila ce que je cherche a faire.

J'ai une classe A

Class A {
int a
int b
int c

A(HashMap monHash){
// ici je veux recupere les clefs en faisant
// un keySet puis un iterateur sur monHash
// ce que je voudrais faire c'est affecter
// les variables contenus dans le hash
// et mettre les autres a 0
}
}


Par exemple si monHash contient [a] -> 8 et [b] -> 3 je set a et b et c
prendra la valeur par defaut.

Cela est-il possible ?

Raphael Tagliani wrote:
Class A {
private int valeur;
A(int valeur)
{
// this.valeur fait référence au champ de l'objet
// alors que valeur fait référence au paramètre passé au
// constructeur
this.valeur = valeur;
}
public void printVal()
{
System.out.println(this.valeur);
}
}

Class Tester {
public static void main(String[] args)
{
// création des objets, en leur passant la
valeur // initiale en
paramètre
A a0 = new A(0);
A a1 = new A(1);

// affichage de la valeur selon l'objet
a0.printVal();
a1.printVal();
}
}

Je n'ai pas compilé, mais ça devrait fonctionner.
J'espère avoir bien compris la question...
Ta 'variable' ici sera a0 ou a1, il s'agit d'un objet (une réalisation
ou instance de la classe A).
Tant que ta méthode n'est pas déclarée 'static', c'est bien celle de
l'objet qui est appellée.

Schlum wrote:
Est-il possible (et si oui comment) d'appeler une méthode d'un objet a
partir d'une variable ?

Je m'explique :
disons que j'ai une classe A avec deux méthodes setCeci et setCela
si je stocke dans une variable (genre une String maVar) une des deux
valeurs setCeci ou setCela, y a t il un moyen de faire quelque chose
qui ressemblerait a :

A.maVar() et que ca appeller A.setCeci ou A.setCela suivant la valeur
de maVar

Je seche, ca fait 1 heure que je cherche sur google mais je suis pas
capable d'exprimer mon problème avec les mots qui vont bien....

Merci d'avance,
Schlum





Avatar
Schlum
jeje900ss wrote:
Salut

Schlum wrote:
Est-il possible (et si oui comment) d'appeler une méthode d'un objet a
partir d'une variable ?



Moi j'utiliserai la "Réflexion" de Java.
Un truc du style :

this.getClass().getMethod("", new Class[]).invoke(...)

Je pense que tu dois pouvoir trouver pas mal d'exemple sur internet avec
les mot clef Introspection, Reflexion

Jérôme
Merci beaucoup pour ton aide, je vais verifier ca de suite.


Jérôme aussi


Avatar
Mike Baroukh
Tu peux aussi utiliser BeanUtils :
http://jakarta.apache.org/commons/beanutils/

Ensuite tu pourra directement faire
BeanUtils.getProperty(monObjet, "proprieteA");

Mike

jeje900ss wrote:
Salut

Schlum wrote:
Est-il possible (et si oui comment) d'appeler une méthode d'un objet
a partir d'une variable ?



Moi j'utiliserai la "Réflexion" de Java.
Un truc du style :

this.getClass().getMethod("", new Class[]).invoke(...)

Je pense que tu dois pouvoir trouver pas mal d'exemple sur internet
avec les mot clef Introspection, Reflexion

Jérôme
Merci beaucoup pour ton aide, je vais verifier ca de suite.


Jérôme aussi




Avatar
Raphael Tagliani
Tu es sûr que c'est la bonne méthode pour résoudre ton problème? Est-ce
qu'il n'y aurait pas plutôt un problème d'architecture?

Disons par exemple, qu'on a un hashtable H, qui donne pour chaque sac la
bille de billard qu'il contient:
H = {
sac_vert -> bille_7,
sac_bleu -> bille_2,
sac_rouge -> bille_5
}

par défaut, on met la valeur 'vide', si le hashtable ne renseigne pas
sur le contenu d'un sac.

Maintenant on veut construire un ensemble E:
E = {sac_orange, sac_bleu}
à partir de H, pour faire corresppondre:
sac_orange -> vide
sac_bleu -> bille_2

... donc en fait, tu essaie de faire l'intersection de deux hashtable, non?

Ce que je proposerai de faire:
Dans ta classe A, tu crée un champ HI (comme Hashtable Intersection) de
type hashtable.
Après, dans le constructeur, tu initialise HI avec tous les champs dont
tu auras besoin, puis tu fais l'intersection des clés de H(que tu reçois
en param de ton constructeur) et HI, et tu met à jour HI.
De cette façon:
- Pour toute clé k dans (H intesection HI), la valeur est copiée
- Pour toutes les autres clés, la valeur est 'vide'.

Après, tu as une structure de données efficace et modulaire dans A, sans
devoir faire appel à l'introspection.


Schlum wrote:
Merci bcp pour ta reponse.

Je ne crois pas que ca corresponde.

En fait voila ce que je cherche a faire.

J'ai une classe A

Class A {
int a
int b
int c

A(HashMap monHash){
// ici je veux recupere les clefs en faisant
// un keySet puis un iterateur sur monHash
// ce que je voudrais faire c'est affecter
// les variables contenus dans le hash
// et mettre les autres a 0
}
}


Par exemple si monHash contient [a] -> 8 et [b] -> 3 je set a et b et c
prendra la valeur par defaut.

Cela est-il possible ?

Raphael Tagliani wrote:

Class A {
private int valeur;
A(int valeur)
{
// this.valeur fait référence au champ de l'objet
// alors que valeur fait référence au paramètre passé au
// constructeur
this.valeur = valeur;
}
public void printVal()
{
System.out.println(this.valeur);
}
}

Class Tester {
public static void main(String[] args)
{
// création des objets, en leur passant la
valeur // initiale en
paramètre
A a0 = new A(0);
A a1 = new A(1);
// affichage de la valeur selon l'objet
a0.printVal();
a1.printVal();
}
}

Je n'ai pas compilé, mais ça devrait fonctionner.
J'espère avoir bien compris la question...
Ta 'variable' ici sera a0 ou a1, il s'agit d'un objet (une réalisation
ou instance de la classe A).
Tant que ta méthode n'est pas déclarée 'static', c'est bien celle de
l'objet qui est appellée.

Schlum wrote:

Est-il possible (et si oui comment) d'appeler une méthode d'un objet
a partir d'une variable ?

Je m'explique :
disons que j'ai une classe A avec deux méthodes setCeci et setCela
si je stocke dans une variable (genre une String maVar) une des deux
valeurs setCeci ou setCela, y a t il un moyen de faire quelque chose
qui ressemblerait a :

A.maVar() et que ca appeller A.setCeci ou A.setCela suivant la valeur
de maVar

Je seche, ca fait 1 heure que je cherche sur google mais je suis pas
capable d'exprimer mon problème avec les mots qui vont bien....

Merci d'avance,
Schlum








Avatar
Schlum
Raphael Tagliani wrote:
Tu es sûr que c'est la bonne méthode pour résoudre ton problème? Est-ce
qu'il n'y aurait pas plutôt un problème d'architecture?

Disons par exemple, qu'on a un hashtable H, qui donne pour chaque sac la
bille de billard qu'il contient:
H = {
sac_vert -> bille_7,
sac_bleu -> bille_2,
sac_rouge -> bille_5
}

par défaut, on met la valeur 'vide', si le hashtable ne renseigne pas
sur le contenu d'un sac.

Maintenant on veut construire un ensemble E:
E = {sac_orange, sac_bleu}
à partir de H, pour faire corresppondre:
sac_orange -> vide
sac_bleu -> bille_2

... donc en fait, tu essaie de faire l'intersection de deux hashtable, non?

Ce que je proposerai de faire:
Dans ta classe A, tu crée un champ HI (comme Hashtable Intersection) de
type hashtable.
Après, dans le constructeur, tu initialise HI avec tous les champs dont
tu auras besoin, puis tu fais l'intersection des clés de H(que tu reçois
en param de ton constructeur) et HI, et tu met à jour HI.
De cette façon:
- Pour toute clé k dans (H intesection HI), la valeur est copiée
- Pour toutes les autres clés, la valeur est 'vide'.

Après, tu as une structure de données efficace et modulaire dans A, sans
devoir faire appel à l'introspection.


Schlum wrote:
Merci bcp pour ta reponse.

Je ne crois pas que ca corresponde.

En fait voila ce que je cherche a faire.

J'ai une classe A

Class A {
int a
int b
int c
A(HashMap monHash){
// ici je veux recupere les clefs en faisant
// un keySet puis un iterateur sur monHash
// ce que je voudrais faire c'est affecter
// les variables contenus dans le hash
// et mettre les autres a 0
}
}


Par exemple si monHash contient [a] -> 8 et [b] -> 3 je set a et b et
c prendra la valeur par defaut.

Cela est-il possible ?

Raphael Tagliani wrote:

Class A {
private int valeur;
A(int valeur)
{
// this.valeur fait référence au champ de l'objet
// alors que valeur fait référence au paramètre passé au
// constructeur
this.valeur = valeur;
}
public void printVal()
{
System.out.println(this.valeur);
}
}

Class Tester {
public static void main(String[] args)
{
// création des objets, en leur passant la
valeur // initiale en
paramètre
A a0 = new A(0);
A a1 = new A(1);
// affichage de la valeur selon l'objet
a0.printVal();
a1.printVal();
}
}

Je n'ai pas compilé, mais ça devrait fonctionner.
J'espère avoir bien compris la question...
Ta 'variable' ici sera a0 ou a1, il s'agit d'un objet (une réalisation
ou instance de la classe A).
Tant que ta méthode n'est pas déclarée 'static', c'est bien celle de
l'objet qui est appellée.

Schlum wrote:

Est-il possible (et si oui comment) d'appeler une méthode d'un objet
a partir d'une variable ?

Je m'explique :
disons que j'ai une classe A avec deux méthodes setCeci et setCela
si je stocke dans une variable (genre une String maVar) une des deux
valeurs setCeci ou setCela, y a t il un moyen de faire quelque chose
qui ressemblerait a :

A.maVar() et que ca appeller A.setCeci ou A.setCela suivant la
valeur de maVar

Je seche, ca fait 1 heure que je cherche sur google mais je suis pas
capable d'exprimer mon problème avec les mots qui vont bien....

Merci d'avance,
Schlum






Oui, tu as tout a fait raison.

J'etais bien fatigue quand j'ai essaye de faire ca, ma facon de le faire
etait vraiment pas la meilleure.
Allez, on va dire que c'est parceque je debute en Java.

Merci pour ton aide,
Schlum




Avatar
lacombefr
Bonjour !

petite question d'un débutant moyen..

Existe t'il une methode qui permette de faire l'intersection de deux
Hashtable ou faut il écrire le code soi même ?
Avatar
jeje900ss
Est-il possible (et si oui comment) d'appeler une méthode d'un objet
a partir d'une variable ?



Moi j'utiliserai la "Réflexion" de Java.
Un truc du style :

this.getClass().getMethod("", new Class[]).invoke(...)




Je crois que j'avais pas du tout compris ton problème...

Jérôme



Avatar
Raphael Tagliani
wrote:
Bonjour !

petite question d'un débutant moyen..

Existe t'il une methode qui permette de faire l'intersection de deux
Hashtable ou faut il écrire le code soi même ?

Oui:


J'ai trouvé un exemple sur un forum:

<cite>

Java does have the methods to do unions, intersections, subsets, and set
differences. Here's a demo

import java.util.*;

public class X
{
public static void main(String[] args)
{
Set s1 = new HashSet();

s1.add(new Integer(1));
s1.add(new Integer(2));
s1.add(new Integer(3));
s1.add(new Integer(4));

Set s2 = new HashSet();

s2.add(new Integer(2));
s2.add(new Integer(3));

// intersection - create a duplicate set so it's nondestructive
Set intersection = new HashSet(s1);
intersection.retainAll(s2);
System.out.println(intersection);

// union - create a duplicate set so it's nondestructive
Set union = new HashSet(s1);
union.addAll(s2);
System.out.println(union);
}
}



prints
[2, 3]
[2, 4, 1, 3]

</cite>


pour le voir dans son contexte original:
http://forum.java.sun.com/thread.jspa?threadIDU3156&messageID'06705

1 2