J'ai un souci en JAVA que je ne vois pas comment résoudre. Voilà, j'ai une
méthode nommée defineObj qui est chargée de renvoyer les objets de type a,b,
ou c en fonction de leur représentation en String. Grossièrement :
defineObj("a") renverra un objet de type a.
En tout cas cela marche bien. Mais mon problème est que les objets ne sont
plus utilisables en effet dans ma méthode defineObj, je suis bien obliger de
renvoyer un objet de type object et donc les instances renvoyées par
defineObj ne sont plus utilisables car on ne peut plus acceder au méthodes
de ces objets. Admettons par exemple que dans les type a, b ou c, j'ai des
méthodes communes nommées "set" et "get" :
Object cible,source1,source2;
a=defineObj("a");
b=defineObj("b");
c=defineObj("c");
a.set() // Impossible car a est un Objet de type Object et non de type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pierre Crescenzo
Bonjour,
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Une solution peut consister à faire une classe ou une interface X dont les types de A, B et C hériteraient et qui aurait une méthode "set" abstraite. Puis de faire "(X)a.set()".
Si cela n'est pas possible, il y a encore la possibilité d'utiliser la méthode "isInstance" de la classe Class pour trouver le type de l'objet puis la méthode "invoke" de la classe Method pour lancer "set".
Cordialement,
[CITATION ALÉATOIRE : Prouver que j'ai raison serait accorder que je puis avoir tort. Beaumarchais]
-- Pierre Crescenzo mailto: http://www.crescenzo.nom.fr/
Bonjour,
Object cible,source1,source2;
aÞfineObj("a");
bÞfineObj("b");
cÞfineObj("c");
a.set() // Impossible car a est un Objet de type Object et non de type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Une solution peut consister à faire une classe ou une interface X dont
les types de A, B et C hériteraient et qui aurait une méthode "set"
abstraite. Puis de faire "(X)a.set()".
Si cela n'est pas possible, il y a encore la possibilité d'utiliser la
méthode "isInstance" de la classe Class pour trouver le type de l'objet
puis la méthode "invoke" de la classe Method pour lancer "set".
Cordialement,
[CITATION ALÉATOIRE : Prouver que j'ai raison serait accorder que je
puis avoir tort. Beaumarchais]
--
Pierre Crescenzo
mailto:Pierre@crescenzo.nom.fr
http://www.crescenzo.nom.fr/
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Une solution peut consister à faire une classe ou une interface X dont les types de A, B et C hériteraient et qui aurait une méthode "set" abstraite. Puis de faire "(X)a.set()".
Si cela n'est pas possible, il y a encore la possibilité d'utiliser la méthode "isInstance" de la classe Class pour trouver le type de l'objet puis la méthode "invoke" de la classe Method pour lancer "set".
Cordialement,
[CITATION ALÉATOIRE : Prouver que j'ai raison serait accorder que je puis avoir tort. Beaumarchais]
-- Pierre Crescenzo mailto: http://www.crescenzo.nom.fr/
Damien GUERIN
Comment utiliser isInstance et invoke ??? Merci
"Pierre Crescenzo" a écrit dans le message news:
Bonjour,
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Une solution peut consister à faire une classe ou une interface X dont les types de A, B et C hériteraient et qui aurait une méthode "set" abstraite. Puis de faire "(X)a.set()".
Si cela n'est pas possible, il y a encore la possibilité d'utiliser la méthode "isInstance" de la classe Class pour trouver le type de l'objet puis la méthode "invoke" de la classe Method pour lancer "set".
Cordialement,
[CITATION ALÉATOIRE : Prouver que j'ai raison serait accorder que je puis avoir tort. Beaumarchais]
-- Pierre Crescenzo mailto: http://www.crescenzo.nom.fr/
Comment utiliser isInstance et invoke ???
Merci
"Pierre Crescenzo" <Pierre@crescenzo.nom.fr> a écrit dans le message news:
g4bllrubu0c.fsf@yoda.i3s.unice.fr...
Bonjour,
Object cible,source1,source2;
aÞfineObj("a");
bÞfineObj("b");
cÞfineObj("c");
a.set() // Impossible car a est un Objet de type Object et non de
type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes
méthodes...
Une solution peut consister à faire une classe ou une interface X dont
les types de A, B et C hériteraient et qui aurait une méthode "set"
abstraite. Puis de faire "(X)a.set()".
Si cela n'est pas possible, il y a encore la possibilité d'utiliser la
méthode "isInstance" de la classe Class pour trouver le type de l'objet
puis la méthode "invoke" de la classe Method pour lancer "set".
Cordialement,
[CITATION ALÉATOIRE : Prouver que j'ai raison serait accorder que je
puis avoir tort. Beaumarchais]
--
Pierre Crescenzo
mailto:Pierre@crescenzo.nom.fr
http://www.crescenzo.nom.fr/
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Une solution peut consister à faire une classe ou une interface X dont les types de A, B et C hériteraient et qui aurait une méthode "set" abstraite. Puis de faire "(X)a.set()".
Si cela n'est pas possible, il y a encore la possibilité d'utiliser la méthode "isInstance" de la classe Class pour trouver le type de l'objet puis la méthode "invoke" de la classe Method pour lancer "set".
Cordialement,
[CITATION ALÉATOIRE : Prouver que j'ai raison serait accorder que je puis avoir tort. Beaumarchais]
-- Pierre Crescenzo mailto: http://www.crescenzo.nom.fr/
Olivier Demaine
"Damien GUERIN" a écrit dans le message de news: bm3g1a$ign$
Comment utiliser isInstance et invoke ??? Merci
if (a instanceof X) ((X)a).get()
si X est une interface commune le instanceof est inutile
"Pierre Crescenzo" a écrit dans le message news:
Bonjour,
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de
type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Une solution peut consister à faire une classe ou une interface X dont les types de A, B et C hériteraient et qui aurait une méthode "set" abstraite. Puis de faire "(X)a.set()".
Si cela n'est pas possible, il y a encore la possibilité d'utiliser la méthode "isInstance" de la classe Class pour trouver le type de l'objet puis la méthode "invoke" de la classe Method pour lancer "set".
Cordialement,
[CITATION ALÉATOIRE : Prouver que j'ai raison serait accorder que je puis avoir tort. Beaumarchais]
-- Pierre Crescenzo mailto: http://www.crescenzo.nom.fr/
"Damien GUERIN" <dguerin@enssat.fr> a écrit dans le message de news:
bm3g1a$ign$1@news.univ-rennes1.fr...
Comment utiliser isInstance et invoke ???
Merci
if (a instanceof X)
((X)a).get()
si X est une interface commune le instanceof est inutile
"Pierre Crescenzo" <Pierre@crescenzo.nom.fr> a écrit dans le message news:
g4bllrubu0c.fsf@yoda.i3s.unice.fr...
Bonjour,
Object cible,source1,source2;
aÞfineObj("a");
bÞfineObj("b");
cÞfineObj("c");
a.set() // Impossible car a est un Objet de type Object et non
de
type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes
méthodes...
Une solution peut consister à faire une classe ou une interface X dont
les types de A, B et C hériteraient et qui aurait une méthode "set"
abstraite. Puis de faire "(X)a.set()".
Si cela n'est pas possible, il y a encore la possibilité d'utiliser la
méthode "isInstance" de la classe Class pour trouver le type de l'objet
puis la méthode "invoke" de la classe Method pour lancer "set".
Cordialement,
[CITATION ALÉATOIRE : Prouver que j'ai raison serait accorder que je
puis avoir tort. Beaumarchais]
--
Pierre Crescenzo
mailto:Pierre@crescenzo.nom.fr
http://www.crescenzo.nom.fr/
"Damien GUERIN" a écrit dans le message de news: bm3g1a$ign$
Comment utiliser isInstance et invoke ??? Merci
if (a instanceof X) ((X)a).get()
si X est une interface commune le instanceof est inutile
"Pierre Crescenzo" a écrit dans le message news:
Bonjour,
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de
type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Une solution peut consister à faire une classe ou une interface X dont les types de A, B et C hériteraient et qui aurait une méthode "set" abstraite. Puis de faire "(X)a.set()".
Si cela n'est pas possible, il y a encore la possibilité d'utiliser la méthode "isInstance" de la classe Class pour trouver le type de l'objet puis la méthode "invoke" de la classe Method pour lancer "set".
Cordialement,
[CITATION ALÉATOIRE : Prouver que j'ai raison serait accorder que je puis avoir tort. Beaumarchais]
-- Pierre Crescenzo mailto: http://www.crescenzo.nom.fr/
Nicolas Repiquet
"Damien GUERIN" a écrit dans le message news: bm38ch$fui$
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type
A a = (A)defineObj("a");
a.set();
Attention, le compilateur ne peut pas vérifier que tu ne t'es pas trompé, et l'erreur n'apparaitra qu'a l'execution.
B b = (B)defineObj("a"); // compile, mais provoque une erreur.
-- Nicolas Repiquet
"Damien GUERIN" <dguerin@enssat.fr> a écrit dans le message news:
bm38ch$fui$1@news.univ-rennes1.fr...
Object cible,source1,source2;
aÞfineObj("a");
bÞfineObj("b");
cÞfineObj("c");
a.set() // Impossible car a est un Objet de type Object et non de
type
A a = (A)defineObj("a");
a.set();
Attention, le compilateur ne peut pas vérifier que tu ne t'es pas trompé, et
l'erreur n'apparaitra qu'a l'execution.
B b = (B)defineObj("a"); // compile, mais provoque une erreur.
Je ne peux pas faire ça, car je ne sais pas à l'avance quel objet sera renvoyé par defineObj...
Merci
"Nicolas Repiquet" a écrit dans le message de news:3f854c15$0$20654$
"Damien GUERIN" a écrit dans le message news: bm38ch$fui$
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type
A a = (A)defineObj("a");
a.set();
Attention, le compilateur ne peut pas vérifier que tu ne t'es pas trompé, et
l'erreur n'apparaitra qu'a l'execution.
B b = (B)defineObj("a"); // compile, mais provoque une erreur.
-- Nicolas Repiquet
Nicolas Delsaux
Le 09.10 2003, "Damien GUERIN" s'est levé(e) et s'est dit "tiens, je vais écrire aux mecs de fr.comp.lang.java"
Bonjour à vous,
J'ai un souci en JAVA que je ne vois pas comment résoudre. Voilà, j'ai une méthode nommée defineObj qui est chargée de renvoyer les objets de type a,b, ou c en fonction de leur représentation en String. Grossièrement : defineObj("a") renverra un objet de type a. En tout cas cela marche bien. Mais mon problème est que les objets ne sont plus utilisables en effet dans ma méthode defineObj, je suis bien obliger de renvoyer un objet de type object et donc les instances renvoyées par defineObj ne sont plus utilisables car on ne peut plus acceder au méthodes de ces objets. Admettons par exemple que dans les type a, b ou c, j'ai des méthodes communes nommées "set" et "get" :
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type a
Je te conseille de consulter attentivement le pattern factory, qui correspond exactement à tes besoins. En gros, chacune de tes classes implémente une interface, par exemple Definable, et tu disposes d'une classe DefinableFactory, dans laquelle tu as une seule méthode statique, public Definable define(String arg) {...} L'implémentation est laissée à ta guise, mais je pense que l'utilisation des méthodes Class.forName et Class.newInstance A noter que la méthode newInstance va appeler automatiquement le constructeur sans argument de ta classe, qui doit fournir les bonnes initialisations. Au mieux, ton interface Definable dispose d'une méthode configure() prenant certains paramètres (que je te laisse le soin de définir), qui va faire les configurations complémentaires. En fait, cette méthode configure est ta méthode set, mais avec des paramètres, peut-être :-) Reste un inconvénient : tu ne connaitras tes objets que sous la forme d'objets Definable, ce qui peut être limitant. D'un autre côté, je pense que si tu as créé dynamiquement ces objets, tu vas sûrement les utiliser de la même manière, et la définition d'une interface est alors une étape sinon indispensable, du moins tout à fait nécessaire pour foirnir à ton logiciel un degré d'évolutivité suffisant.
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Merci de votre aide.
-- Nicolas Delsaux "Les Etats-Unis d'Amérique forment un pays qui est passé directement de la barbarie à la décadence sans jamais avoir connu la civilisation." Oscar Wilde
Le 09.10 2003, "Damien GUERIN" <dguerin@enssat.fr> s'est levé(e) et
s'est dit "tiens, je vais écrire aux mecs de fr.comp.lang.java"
Bonjour à vous,
J'ai un souci en JAVA que je ne vois pas comment résoudre. Voilà, j'ai
une méthode nommée defineObj qui est chargée de renvoyer les objets de
type a,b, ou c en fonction de leur représentation en String.
Grossièrement : defineObj("a") renverra un objet de type a.
En tout cas cela marche bien. Mais mon problème est que les objets ne
sont plus utilisables en effet dans ma méthode defineObj, je suis bien
obliger de renvoyer un objet de type object et donc les instances
renvoyées par defineObj ne sont plus utilisables car on ne peut plus
acceder au méthodes de ces objets. Admettons par exemple que dans les
type a, b ou c, j'ai des méthodes communes nommées "set" et "get" :
Object cible,source1,source2;
aÞfineObj("a");
bÞfineObj("b");
cÞfineObj("c");
a.set() // Impossible car a est un Objet de type Object et non
de type
a
Je te conseille de consulter attentivement le pattern factory, qui
correspond exactement à tes besoins.
En gros, chacune de tes classes implémente une interface, par exemple
Definable, et tu disposes d'une classe DefinableFactory, dans laquelle tu
as une seule méthode statique,
public Definable define(String arg) {...}
L'implémentation est laissée à ta guise, mais je pense que l'utilisation
des méthodes Class.forName et Class.newInstance
A noter que la méthode newInstance va appeler automatiquement le
constructeur sans argument de ta classe, qui doit fournir les bonnes
initialisations. Au mieux, ton interface Definable dispose d'une méthode
configure() prenant certains paramètres (que je te laisse le soin de
définir), qui va faire les configurations complémentaires.
En fait, cette méthode configure est ta méthode set, mais avec des
paramètres, peut-être :-)
Reste un inconvénient : tu ne connaitras tes objets que sous la forme
d'objets Definable, ce qui peut être limitant. D'un autre côté, je pense
que si tu as créé dynamiquement ces objets, tu vas sûrement les utiliser
de la même manière, et la définition d'une interface est alors une étape
sinon indispensable, du moins tout à fait nécessaire pour foirnir à ton
logiciel un degré d'évolutivité suffisant.
J'aimerais faire en sorte de pouvoir tout de même accéder à mes
méthodes...
Merci de votre aide.
--
Nicolas Delsaux
"Les Etats-Unis d'Amérique forment un pays qui est passé directement de
la barbarie à la décadence sans jamais avoir connu la civilisation."
Oscar Wilde
Le 09.10 2003, "Damien GUERIN" s'est levé(e) et s'est dit "tiens, je vais écrire aux mecs de fr.comp.lang.java"
Bonjour à vous,
J'ai un souci en JAVA que je ne vois pas comment résoudre. Voilà, j'ai une méthode nommée defineObj qui est chargée de renvoyer les objets de type a,b, ou c en fonction de leur représentation en String. Grossièrement : defineObj("a") renverra un objet de type a. En tout cas cela marche bien. Mais mon problème est que les objets ne sont plus utilisables en effet dans ma méthode defineObj, je suis bien obliger de renvoyer un objet de type object et donc les instances renvoyées par defineObj ne sont plus utilisables car on ne peut plus acceder au méthodes de ces objets. Admettons par exemple que dans les type a, b ou c, j'ai des méthodes communes nommées "set" et "get" :
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type a
Je te conseille de consulter attentivement le pattern factory, qui correspond exactement à tes besoins. En gros, chacune de tes classes implémente une interface, par exemple Definable, et tu disposes d'une classe DefinableFactory, dans laquelle tu as une seule méthode statique, public Definable define(String arg) {...} L'implémentation est laissée à ta guise, mais je pense que l'utilisation des méthodes Class.forName et Class.newInstance A noter que la méthode newInstance va appeler automatiquement le constructeur sans argument de ta classe, qui doit fournir les bonnes initialisations. Au mieux, ton interface Definable dispose d'une méthode configure() prenant certains paramètres (que je te laisse le soin de définir), qui va faire les configurations complémentaires. En fait, cette méthode configure est ta méthode set, mais avec des paramètres, peut-être :-) Reste un inconvénient : tu ne connaitras tes objets que sous la forme d'objets Definable, ce qui peut être limitant. D'un autre côté, je pense que si tu as créé dynamiquement ces objets, tu vas sûrement les utiliser de la même manière, et la définition d'une interface est alors une étape sinon indispensable, du moins tout à fait nécessaire pour foirnir à ton logiciel un degré d'évolutivité suffisant.
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Merci de votre aide.
-- Nicolas Delsaux "Les Etats-Unis d'Amérique forment un pays qui est passé directement de la barbarie à la décadence sans jamais avoir connu la civilisation." Oscar Wilde
Nicolas Repiquet
"Damien GUERIN" a écrit dans le message news: bm3ic8$j9i$
Je ne peux pas faire ça, car je ne sais pas à l'avance quel objet sera renvoyé par defineObj...
Alors tu as un problème de conception.
Essayes de nous dire globalement quel est le but de tout ça, on va trouver une solution.
-- Nicolas Repiquet
"Damien GUERIN" <dguerin@enssat.fr> a écrit dans le message news:
bm3ic8$j9i$1@news.univ-rennes1.fr...
Je ne peux pas faire ça, car je ne sais pas à l'avance quel objet sera
renvoyé par defineObj...
Alors tu as un problème de conception.
Essayes de nous dire globalement quel est le but de tout ça, on va trouver
une solution.
de ces objets. Admettons par exemple que dans les type a, b ou c, j'ai des méthodes communes nommées "set" et "get" :
ça c'est une interface:
public interface myInterface {
public void set(); public Object get();
}
Object cible,source1,source2;
myInterface a, b, c;
aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type
// Maintenant c'est possible puisque A est "de type" myInterface
public myInterface defineObject(String myClass) { if (myClass.equals("a")) { return new myA; } ... }
public class myA implements myInterface { public void set() { System.out.println("Set method in a"); }
public Object get() { System.out.println("Get method in b"); return ""; } }
etc, etc, for B,C
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Merci de votre aide. Ciao.
David
Bonjour,
Peut-être que l'exploitation du package java.lang.reflect pourrait vous aider. Cela permettrait de vérifier si une méthode setXXX est bien présente dans les objets que vous créez et si c'est le cas exécuter la méthode sur l'instance de l'objet crée.
ex: évidemment c'est très raccourcis Method m = a.getClass().getMethod("setXXX", types des parametres); if ( m != null ) m.invoke( a, les parametres);
Sacha
"Damien GUERIN" a écrit dans le message de news:bm38ch$fui$
Bonjour à vous,
J'ai un souci en JAVA que je ne vois pas comment résoudre. Voilà, j'ai une méthode nommée defineObj qui est chargée de renvoyer les objets de type a,b,
ou c en fonction de leur représentation en String. Grossièrement : defineObj("a") renverra un objet de type a. En tout cas cela marche bien. Mais mon problème est que les objets ne sont plus utilisables en effet dans ma méthode defineObj, je suis bien obliger de
renvoyer un objet de type object et donc les instances renvoyées par defineObj ne sont plus utilisables car on ne peut plus acceder au méthodes de ces objets. Admettons par exemple que dans les type a, b ou c, j'ai des méthodes communes nommées "set" et "get" :
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Merci de votre aide.
Bonjour,
Peut-être que l'exploitation du package java.lang.reflect pourrait vous
aider. Cela permettrait de vérifier si une méthode setXXX est bien
présente dans les objets que vous créez et si c'est le cas exécuter
la méthode sur l'instance de l'objet crée.
ex: évidemment c'est très raccourcis
Method m = a.getClass().getMethod("setXXX", types des parametres);
if ( m != null ) m.invoke( a, les parametres);
Sacha
"Damien GUERIN" <dguerin@enssat.fr> a écrit dans le message de
news:bm38ch$fui$1@news.univ-rennes1.fr...
Bonjour à vous,
J'ai un souci en JAVA que je ne vois pas comment résoudre. Voilà, j'ai une
méthode nommée defineObj qui est chargée de renvoyer les objets de type
a,b,
ou c en fonction de leur représentation en String. Grossièrement :
defineObj("a") renverra un objet de type a.
En tout cas cela marche bien. Mais mon problème est que les objets ne sont
plus utilisables en effet dans ma méthode defineObj, je suis bien obliger
de
renvoyer un objet de type object et donc les instances renvoyées par
defineObj ne sont plus utilisables car on ne peut plus acceder au méthodes
de ces objets. Admettons par exemple que dans les type a, b ou c, j'ai des
méthodes communes nommées "set" et "get" :
Object cible,source1,source2;
aÞfineObj("a");
bÞfineObj("b");
cÞfineObj("c");
a.set() // Impossible car a est un Objet de type Object et non de
type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes
méthodes...
Peut-être que l'exploitation du package java.lang.reflect pourrait vous aider. Cela permettrait de vérifier si une méthode setXXX est bien présente dans les objets que vous créez et si c'est le cas exécuter la méthode sur l'instance de l'objet crée.
ex: évidemment c'est très raccourcis Method m = a.getClass().getMethod("setXXX", types des parametres); if ( m != null ) m.invoke( a, les parametres);
Sacha
"Damien GUERIN" a écrit dans le message de news:bm38ch$fui$
Bonjour à vous,
J'ai un souci en JAVA que je ne vois pas comment résoudre. Voilà, j'ai une méthode nommée defineObj qui est chargée de renvoyer les objets de type a,b,
ou c en fonction de leur représentation en String. Grossièrement : defineObj("a") renverra un objet de type a. En tout cas cela marche bien. Mais mon problème est que les objets ne sont plus utilisables en effet dans ma méthode defineObj, je suis bien obliger de
renvoyer un objet de type object et donc les instances renvoyées par defineObj ne sont plus utilisables car on ne peut plus acceder au méthodes de ces objets. Admettons par exemple que dans les type a, b ou c, j'ai des méthodes communes nommées "set" et "get" :
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Merci de votre aide.
Salut voici un truc (peut être que un javax.rmi.PortableRemoteObject.narrow() serait mieux à adapter )
Pour moi, defineObj devrait être une méthode d'une classe InvovationHandler qui renvérait un proxy. Cette classe, expose l'interface souhaitée en fonction du paramètre.
public class DefineObjDelegator implements java.lang.reflect.InvocationHandler { Object _delegate; Class _interface;
public Object defineObj(String par_String) { getmyObject( par_String );
return tmp_proxy_Object = java.lang.reflect.Proxy.newProxyInstance ( _ClassLoader, (new Class[1]){_interface}, this ); }
public Object invoke(Object proxy, Method m, Object[] args) throws Exception { if ( m.getDeclaringClass().isAssignableFrom( _interfaces ) ) result = m.invoke( _delegate, args ); else throw newException("exception invoke");
return result; }
-- François LE DORNER.
"Damien GUERIN" a écrit dans le message de news:bm38ch$fui$
Bonjour à vous,
J'ai un souci en JAVA que je ne vois pas comment résoudre. Voilà, j'ai une méthode nommée defineObj qui est chargée de renvoyer les objets de type a,b,
ou c en fonction de leur représentation en String. Grossièrement : defineObj("a") renverra un objet de type a. En tout cas cela marche bien. Mais mon problème est que les objets ne sont plus utilisables en effet dans ma méthode defineObj, je suis bien obliger de
renvoyer un objet de type object et donc les instances renvoyées par defineObj ne sont plus utilisables car on ne peut plus acceder au méthodes de ces objets. Admettons par exemple que dans les type a, b ou c, j'ai des méthodes communes nommées "set" et "get" :
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...
Merci de votre aide.
Salut voici un truc
(peut être que un javax.rmi.PortableRemoteObject.narrow() serait mieux à
adapter )
Pour moi, defineObj devrait être une méthode d'une classe InvovationHandler
qui renvérait un proxy. Cette classe, expose l'interface souhaitée en
fonction du
paramètre.
public class DefineObjDelegator implements
java.lang.reflect.InvocationHandler
{ Object _delegate;
Class _interface;
public Object defineObj(String par_String)
{
getmyObject( par_String );
return tmp_proxy_Object = java.lang.reflect.Proxy.newProxyInstance
( _ClassLoader,
(new Class[1]){_interface},
this );
}
public Object invoke(Object proxy, Method m, Object[] args) throws
Exception
{
if ( m.getDeclaringClass().isAssignableFrom( _interfaces ) )
result = m.invoke( _delegate, args );
else throw newException("exception invoke");
return result;
}
--
François LE DORNER.
"Damien GUERIN" <dguerin@enssat.fr> a écrit dans le message de
news:bm38ch$fui$1@news.univ-rennes1.fr...
Bonjour à vous,
J'ai un souci en JAVA que je ne vois pas comment résoudre. Voilà, j'ai une
méthode nommée defineObj qui est chargée de renvoyer les objets de type
a,b,
ou c en fonction de leur représentation en String. Grossièrement :
defineObj("a") renverra un objet de type a.
En tout cas cela marche bien. Mais mon problème est que les objets ne sont
plus utilisables en effet dans ma méthode defineObj, je suis bien obliger
de
renvoyer un objet de type object et donc les instances renvoyées par
defineObj ne sont plus utilisables car on ne peut plus acceder au méthodes
de ces objets. Admettons par exemple que dans les type a, b ou c, j'ai des
méthodes communes nommées "set" et "get" :
Object cible,source1,source2;
aÞfineObj("a");
bÞfineObj("b");
cÞfineObj("c");
a.set() // Impossible car a est un Objet de type Object et non de
type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes
méthodes...
Salut voici un truc (peut être que un javax.rmi.PortableRemoteObject.narrow() serait mieux à adapter )
Pour moi, defineObj devrait être une méthode d'une classe InvovationHandler qui renvérait un proxy. Cette classe, expose l'interface souhaitée en fonction du paramètre.
public class DefineObjDelegator implements java.lang.reflect.InvocationHandler { Object _delegate; Class _interface;
public Object defineObj(String par_String) { getmyObject( par_String );
return tmp_proxy_Object = java.lang.reflect.Proxy.newProxyInstance ( _ClassLoader, (new Class[1]){_interface}, this ); }
public Object invoke(Object proxy, Method m, Object[] args) throws Exception { if ( m.getDeclaringClass().isAssignableFrom( _interfaces ) ) result = m.invoke( _delegate, args ); else throw newException("exception invoke");
return result; }
-- François LE DORNER.
"Damien GUERIN" a écrit dans le message de news:bm38ch$fui$
Bonjour à vous,
J'ai un souci en JAVA que je ne vois pas comment résoudre. Voilà, j'ai une méthode nommée defineObj qui est chargée de renvoyer les objets de type a,b,
ou c en fonction de leur représentation en String. Grossièrement : defineObj("a") renverra un objet de type a. En tout cas cela marche bien. Mais mon problème est que les objets ne sont plus utilisables en effet dans ma méthode defineObj, je suis bien obliger de
renvoyer un objet de type object et donc les instances renvoyées par defineObj ne sont plus utilisables car on ne peut plus acceder au méthodes de ces objets. Admettons par exemple que dans les type a, b ou c, j'ai des méthodes communes nommées "set" et "get" :
Object cible,source1,source2; aÞfineObj("a"); bÞfineObj("b"); cÞfineObj("c"); a.set() // Impossible car a est un Objet de type Object et non de type
a
J'aimerais faire en sorte de pouvoir tout de même accéder à mes méthodes...