Je vous expose mon problème.
Je précise que maintes recherches sur google
et dans les meilleurs librairies ne m'ont pas éclairées.
J'ai crée une classe pour simuler une énumération :
public final class NumeroCase {
private final String name;
public static final NumeroCase out = new NumeroCase("0ut");
public static final NumeroCase c1 = new NumeroCase("1"),
c2 = new NumeroCase("2"),
c3 = new NumeroCase("3"),
......
.....
C44 = new NumeroCase("44");
Pb de débutant Tu n'as pas créé plusieurs classes NumeroCase1,NumeroCase2 mais un constructeur avec un parametre.
Dans la nouvelle version 1.5 de java, je crois qu'il y a les enumérations.
Régis Troadec
Salut,
"toto" a écrit dans le message de news: 8zaVb.8286$
Bonjour,
Je vous expose mon problème. Je précise que maintes recherches sur google et dans les meilleurs librairies ne m'ont pas éclairées.
J'ai crée une classe pour simuler une énumération :
public final class NumeroCase { private final String name; public static final NumeroCase out = new NumeroCase("0ut"); public static final NumeroCase c1 = new NumeroCase("1"), c2 = new NumeroCase("2"), c3 = new NumeroCase("3"), ...... ..... C44 = new NumeroCase("44");
Maintenant à l'intérieur d'une autre classe je veux parcourir les éléments de cette énumération :
for (int i = 1; i <= 44; i++) { Class clnc = null; try { clnc = Class.forName("NumeroCase.c" + i,true,ClassLoader.getSystemClassLoader());
Tes NumeroCase.ci sont des instances de classes (des objets), pas des classes.
Object o = clnc.newInstance();
Le contructeur de NumeroCase etant privé, java risque de ne pas aimer et de balancer une belle exception.
...... .....
Et bien voilà : ça ne marche pas ....le ClassLoader me dit qu'il ne trouve pas les classes NumeroCase.Ci
Merci de votre aide
Utilise getDeclaredConstructor(Class[] param) (java.lang.Class) pour récupérer le constructeur de la classe NumeroCase prenant en parametres ce qui est specifie dans le tableau param. Une fois l'objet Constructor obtenu, tu peux appeler la methode newInstance(monArg) prenant en parametre le truc monArg correspondant à param.
Exple simple :
// NumeroCase.java
import java.lang.*;
public final class NumeroCase { private final String name; public static final NumeroCase out = new NumeroCase("0ut"); public static final NumeroCase c1 = new NumeroCase("1"), c2 = new NumeroCase("2"), c3 = new NumeroCase("3");
public NumeroCase(String name) { this.name = name; } public String toString() { return name; } }
private Vector v; private Constructor cstr; private Class param[] = new Class[1]; private Object Obj[] = new Object[1];
public AnotherClasse() { Class clnc = null;
try { // recup classe NumeroCase clnc = Class.forName("NumeroCase" ,true,ClassLoader.getSystemClassLoader()); param[0] = Class.forName("java.lang.String"); // recup du constructeur (Constructor) de clnc prenant en parametre une String cstr = clnc.getDeclaredConstructor(param);
v = new Vector(3); for (int i = 1; i <= 3; i++) { Obj[0]=(Object)Integer.toString(i); v.add(cstr.newInstance(Obj)); // j'ajoute un NumeroCase(i) dans mon vecteur } } catch(Exception ex) { System.out.println("Merdouille, see below : "); ex.printStackTrace(); }
}
public void dump() { for (int i=0; i<3; i++) System.out.println(v.elementAt(i)); }
public static void main(String args[]) { AnotherClasse exple = new AnotherClasse(); exple.dump(); }
}
a+, regis
Salut,
"toto" <mapson@tele2.fr> a écrit dans le message de news:
8zaVb.8286$zm5.5533@nntpserver.swip.net...
Bonjour,
Je vous expose mon problème.
Je précise que maintes recherches sur google
et dans les meilleurs librairies ne m'ont pas éclairées.
J'ai crée une classe pour simuler une énumération :
public final class NumeroCase {
private final String name;
public static final NumeroCase out = new NumeroCase("0ut");
public static final NumeroCase c1 = new NumeroCase("1"),
c2 = new NumeroCase("2"),
c3 = new NumeroCase("3"),
......
.....
C44 = new NumeroCase("44");
Maintenant à l'intérieur d'une autre classe
je veux parcourir les éléments de cette énumération :
for (int i = 1; i <= 44; i++) {
Class clnc = null;
try {
clnc = Class.forName("NumeroCase.c" +
i,true,ClassLoader.getSystemClassLoader());
Tes NumeroCase.ci sont des instances de classes (des objets), pas des
classes.
Object o = clnc.newInstance();
Le contructeur de NumeroCase etant privé, java risque de ne pas aimer et de
balancer une belle exception.
......
.....
Et bien voilà : ça ne marche pas ....le ClassLoader me dit qu'il ne trouve
pas
les classes NumeroCase.Ci
Merci de votre aide
Utilise getDeclaredConstructor(Class[] param) (java.lang.Class) pour
récupérer le constructeur de la classe NumeroCase prenant en parametres ce
qui est specifie dans le tableau param. Une fois l'objet Constructor obtenu,
tu peux appeler la methode newInstance(monArg) prenant en parametre le truc
monArg correspondant à param.
Exple simple :
// NumeroCase.java
import java.lang.*;
public final class NumeroCase {
private final String name;
public static final NumeroCase out = new NumeroCase("0ut");
public static final NumeroCase c1 = new NumeroCase("1"),
c2 = new NumeroCase("2"),
c3 = new NumeroCase("3");
public NumeroCase(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
private Vector v;
private Constructor cstr;
private Class param[] = new Class[1];
private Object Obj[] = new Object[1];
public AnotherClasse()
{
Class clnc = null;
try
{
// recup classe NumeroCase
clnc = Class.forName("NumeroCase"
,true,ClassLoader.getSystemClassLoader());
param[0] = Class.forName("java.lang.String");
// recup du constructeur (Constructor) de clnc prenant en parametre
une String
cstr = clnc.getDeclaredConstructor(param);
v = new Vector(3);
for (int i = 1; i <= 3; i++) {
Obj[0]=(Object)Integer.toString(i);
v.add(cstr.newInstance(Obj)); // j'ajoute un NumeroCase(i) dans
mon vecteur
}
}
catch(Exception ex)
{
System.out.println("Merdouille, see below : ");
ex.printStackTrace();
}
}
public void dump()
{
for (int i=0; i<3; i++)
System.out.println(v.elementAt(i));
}
public static void main(String args[])
{
AnotherClasse exple = new AnotherClasse();
exple.dump();
}
"toto" a écrit dans le message de news: 8zaVb.8286$
Bonjour,
Je vous expose mon problème. Je précise que maintes recherches sur google et dans les meilleurs librairies ne m'ont pas éclairées.
J'ai crée une classe pour simuler une énumération :
public final class NumeroCase { private final String name; public static final NumeroCase out = new NumeroCase("0ut"); public static final NumeroCase c1 = new NumeroCase("1"), c2 = new NumeroCase("2"), c3 = new NumeroCase("3"), ...... ..... C44 = new NumeroCase("44");
Maintenant à l'intérieur d'une autre classe je veux parcourir les éléments de cette énumération :
for (int i = 1; i <= 44; i++) { Class clnc = null; try { clnc = Class.forName("NumeroCase.c" + i,true,ClassLoader.getSystemClassLoader());
Tes NumeroCase.ci sont des instances de classes (des objets), pas des classes.
Object o = clnc.newInstance();
Le contructeur de NumeroCase etant privé, java risque de ne pas aimer et de balancer une belle exception.
...... .....
Et bien voilà : ça ne marche pas ....le ClassLoader me dit qu'il ne trouve pas les classes NumeroCase.Ci
Merci de votre aide
Utilise getDeclaredConstructor(Class[] param) (java.lang.Class) pour récupérer le constructeur de la classe NumeroCase prenant en parametres ce qui est specifie dans le tableau param. Une fois l'objet Constructor obtenu, tu peux appeler la methode newInstance(monArg) prenant en parametre le truc monArg correspondant à param.
Exple simple :
// NumeroCase.java
import java.lang.*;
public final class NumeroCase { private final String name; public static final NumeroCase out = new NumeroCase("0ut"); public static final NumeroCase c1 = new NumeroCase("1"), c2 = new NumeroCase("2"), c3 = new NumeroCase("3");
public NumeroCase(String name) { this.name = name; } public String toString() { return name; } }
private Vector v; private Constructor cstr; private Class param[] = new Class[1]; private Object Obj[] = new Object[1];
public AnotherClasse() { Class clnc = null;
try { // recup classe NumeroCase clnc = Class.forName("NumeroCase" ,true,ClassLoader.getSystemClassLoader()); param[0] = Class.forName("java.lang.String"); // recup du constructeur (Constructor) de clnc prenant en parametre une String cstr = clnc.getDeclaredConstructor(param);
v = new Vector(3); for (int i = 1; i <= 3; i++) { Obj[0]=(Object)Integer.toString(i); v.add(cstr.newInstance(Obj)); // j'ajoute un NumeroCase(i) dans mon vecteur } } catch(Exception ex) { System.out.println("Merdouille, see below : "); ex.printStackTrace(); }
}
public void dump() { for (int i=0; i<3; i++) System.out.println(v.elementAt(i)); }
public static void main(String args[]) { AnotherClasse exple = new AnotherClasse(); exple.dump(); }
}
a+, regis
toto
"Sylvain" a écrit dans le message de news:wibVb.8305$
Pb de débutant Tu n'as pas créé plusieurs classes NumeroCase1,NumeroCase2 mais un constructeur avec un parametre.
Dans la nouvelle version 1.5 de java, je crois qu'il y a les enumérations.
Débutant..ouais moins que vous !!
Le problème ne vient pas de ma classe d'énumération La classe NuméroCase, elle provient d'un design pattern, bien valide. Ici j'ai fait du copier coller à partir dudit design pattern.
Donc avant de répondre, il faut être plus sûr de son niveau, monsieur Sylvain.
"Sylvain" <slongepee@tele2.fr> a écrit dans le message de
news:wibVb.8305$zm5.5498@nntpserver.swip.net...
Pb de débutant
Tu n'as pas créé plusieurs classes NumeroCase1,NumeroCase2 mais un
constructeur avec un parametre.
Dans la nouvelle version 1.5 de java, je crois qu'il y a les enumérations.
Débutant..ouais moins que vous !!
Le problème ne vient pas de ma classe d'énumération
La classe NuméroCase, elle provient d'un design pattern,
bien valide. Ici j'ai fait du copier coller à partir dudit design pattern.
Donc avant de répondre, il faut être plus sûr de son niveau, monsieur
Sylvain.
"Sylvain" a écrit dans le message de news:wibVb.8305$
Pb de débutant Tu n'as pas créé plusieurs classes NumeroCase1,NumeroCase2 mais un constructeur avec un parametre.
Dans la nouvelle version 1.5 de java, je crois qu'il y a les enumérations.
Débutant..ouais moins que vous !!
Le problème ne vient pas de ma classe d'énumération La classe NuméroCase, elle provient d'un design pattern, bien valide. Ici j'ai fait du copier coller à partir dudit design pattern.
Donc avant de répondre, il faut être plus sûr de son niveau, monsieur Sylvain.
toto
Merci infiniment Régis, je m'empresse d'essayer votre solution. Je bloque sur ce truc depuis pas mal de temps !
Merci infiniment Régis,
je m'empresse d'essayer votre solution.
Je bloque sur ce truc depuis pas mal de temps !
Je ne veux pas accéder au constructeur de la classe d'énumération (et pour cause : il est privé)
Je veux accéder aux instances de cette classe i.e. : NumeroCase.c1, NumeroCase.c2...
En fait je voudrais un truc du genre. NumeroCase ci = NumeroCase.Ci
Si je fait : NumeroCase c1 = NumeroCase.c1...ça marche bien sûr.
Mais je vais pas faire 44 déclarations.
Donc je veux par exemple : NumeroCase c + toString(i) = NumeroCase.c + toString(i)
Régis Troadec
Salut,
"toto" a écrit dans le message de news: 6ozVb.8584$
Arrghh...en fait ça ne marche pas.
Je ne veux pas accéder au constructeur de la classe d'énumération (et pour cause : il est privé)
Je veux accéder aux instances de cette classe i.e. : NumeroCase.c1, NumeroCase.c2...
En fait je voudrais un truc du genre. NumeroCase ci = NumeroCase.Ci
Si je fait : NumeroCase c1 = NumeroCase.c1...ça marche bien sûr.
Mais je vais pas faire 44 déclarations.
Donc je veux par exemple : NumeroCase c + toString(i) = NumeroCase.c + toString(i)
Je m'apercois de ma bêtise, c'était n'importe quoi ce que je t'ai posté, ma solution créait en fait des NumeroCase à la volée au lieu de récupérer les instances. Sans te faire un long discours, j'ai trouvé une URL avec un très bon article qui répondra pleinement à ta question pour créer un type énuméré NumeroCase et accéder à ses diverses instances de manière sûre. Voici le lien : http://gethelp.devx.com/techtips/java_pro/10MinuteSolutions/10min0600.asp
Je reste à ta dispositon pour d'éventuels éclaircissements.
a+, régis
Salut,
"toto" <mapson@tele2.fr> a écrit dans le message de news:
6ozVb.8584$zm5.5730@nntpserver.swip.net...
Arrghh...en fait ça ne marche pas.
Je ne veux pas accéder au constructeur de la
classe d'énumération (et pour cause : il est privé)
Je veux accéder aux instances de cette classe
i.e. : NumeroCase.c1, NumeroCase.c2...
En fait je voudrais un truc du genre.
NumeroCase ci = NumeroCase.Ci
Si je fait :
NumeroCase c1 = NumeroCase.c1...ça marche bien sûr.
Mais je vais pas faire 44 déclarations.
Donc je veux par exemple :
NumeroCase c + toString(i) = NumeroCase.c + toString(i)
Je m'apercois de ma bêtise, c'était n'importe quoi ce que je t'ai posté, ma
solution créait en fait des NumeroCase à la volée au lieu de récupérer les
instances. Sans te faire un long discours, j'ai trouvé une URL avec un très
bon article qui répondra pleinement à ta question pour créer un type énuméré
NumeroCase et accéder à ses diverses instances de manière sûre.
Voici le lien :
http://gethelp.devx.com/techtips/java_pro/10MinuteSolutions/10min0600.asp
Je reste à ta dispositon pour d'éventuels éclaircissements.
"toto" a écrit dans le message de news: 6ozVb.8584$
Arrghh...en fait ça ne marche pas.
Je ne veux pas accéder au constructeur de la classe d'énumération (et pour cause : il est privé)
Je veux accéder aux instances de cette classe i.e. : NumeroCase.c1, NumeroCase.c2...
En fait je voudrais un truc du genre. NumeroCase ci = NumeroCase.Ci
Si je fait : NumeroCase c1 = NumeroCase.c1...ça marche bien sûr.
Mais je vais pas faire 44 déclarations.
Donc je veux par exemple : NumeroCase c + toString(i) = NumeroCase.c + toString(i)
Je m'apercois de ma bêtise, c'était n'importe quoi ce que je t'ai posté, ma solution créait en fait des NumeroCase à la volée au lieu de récupérer les instances. Sans te faire un long discours, j'ai trouvé une URL avec un très bon article qui répondra pleinement à ta question pour créer un type énuméré NumeroCase et accéder à ses diverses instances de manière sûre. Voici le lien : http://gethelp.devx.com/techtips/java_pro/10MinuteSolutions/10min0600.asp
Je reste à ta dispositon pour d'éventuels éclaircissements.
a+, régis
toto
Ok merci,
j'avais vu plusieurs solutions pour réaliser le type énuméré, mais je ne connaissais pas celle-ci.
Entre-temps j'ai trouvé une méthode de la classe Class : Field[] getFields. Elle retourne tous les champs publics d'une classe dans un tableau.
Mais le mieux est d'avoir le plus de solution possible !
N'empêche, j'aimerais bien me mettre au C#...
@+
Ok merci,
j'avais vu plusieurs solutions pour réaliser le type
énuméré, mais je ne connaissais pas celle-ci.
Entre-temps j'ai trouvé une méthode de
la classe Class : Field[] getFields.
Elle retourne tous les champs publics d'une classe dans un tableau.
Mais le mieux est d'avoir le plus de solution possible !
j'avais vu plusieurs solutions pour réaliser le type énuméré, mais je ne connaissais pas celle-ci.
Entre-temps j'ai trouvé une méthode de la classe Class : Field[] getFields. Elle retourne tous les champs publics d'une classe dans un tableau.
Mais le mieux est d'avoir le plus de solution possible !
N'empêche, j'aimerais bien me mettre au C#...
@+
news.wanadoo.fr
Ben moi je me fous qu'on me prenne pour un debutant ou un gourou. La preuve ? ^^ Je serais assez d'accord avec Sylvain pour dire que tu as créé plusieurs instances de la classe NumeroCase. Ce n'est pas le cas ? et si oui pourquoi ? Eclaire-moi ! "toto" a écrit dans le message news: wTnVb.8409$
"Sylvain" a écrit dans le message de news:wibVb.8305$
Pb de débutant Tu n'as pas créé plusieurs classes NumeroCase1,NumeroCase2 mais un constructeur avec un parametre.
Dans la nouvelle version 1.5 de java, je crois qu'il y a les enumérations.
Débutant..ouais moins que vous !!
Le problème ne vient pas de ma classe d'énumération La classe NuméroCase, elle provient d'un design pattern, bien valide. Ici j'ai fait du copier coller à partir dudit design pattern.
Donc avant de répondre, il faut être plus sûr de son niveau, monsieur Sylvain.
Ben moi je me fous qu'on me prenne pour un debutant ou un gourou. La preuve
? ^^
Je serais assez d'accord avec Sylvain pour dire que tu as créé plusieurs
instances de la classe NumeroCase. Ce n'est pas le cas ? et si oui pourquoi
? Eclaire-moi !
"toto" <mapson@tele2.fr> a écrit dans le message news:
wTnVb.8409$zm5.5598@nntpserver.swip.net...
"Sylvain" <slongepee@tele2.fr> a écrit dans le message de
news:wibVb.8305$zm5.5498@nntpserver.swip.net...
Pb de débutant
Tu n'as pas créé plusieurs classes NumeroCase1,NumeroCase2 mais un
constructeur avec un parametre.
Dans la nouvelle version 1.5 de java, je crois qu'il y a les
enumérations.
Débutant..ouais moins que vous !!
Le problème ne vient pas de ma classe d'énumération
La classe NuméroCase, elle provient d'un design pattern,
bien valide. Ici j'ai fait du copier coller à partir dudit design pattern.
Donc avant de répondre, il faut être plus sûr de son niveau, monsieur
Sylvain.
Ben moi je me fous qu'on me prenne pour un debutant ou un gourou. La preuve ? ^^ Je serais assez d'accord avec Sylvain pour dire que tu as créé plusieurs instances de la classe NumeroCase. Ce n'est pas le cas ? et si oui pourquoi ? Eclaire-moi ! "toto" a écrit dans le message news: wTnVb.8409$
"Sylvain" a écrit dans le message de news:wibVb.8305$
Pb de débutant Tu n'as pas créé plusieurs classes NumeroCase1,NumeroCase2 mais un constructeur avec un parametre.
Dans la nouvelle version 1.5 de java, je crois qu'il y a les enumérations.
Débutant..ouais moins que vous !!
Le problème ne vient pas de ma classe d'énumération La classe NuméroCase, elle provient d'un design pattern, bien valide. Ici j'ai fait du copier coller à partir dudit design pattern.
Donc avant de répondre, il faut être plus sûr de son niveau, monsieur Sylvain.
jocelyn
Hop autant pour moi; vous avez tous les 2 raison :) Tu as raison de dire que tu fais une enumeration. Sylvain a raison de dire que tu n'as pas cree plusieurs classes. Vous avez raison de me dire que mon post sert à rien aussi :P Je ferais mieux la prochaine fois...
"news.wanadoo.fr" a écrit dans le message news: c08cvd$d3q$
Ben moi je me fous qu'on me prenne pour un debutant ou un gourou. La preuve
? ^^ Je serais assez d'accord avec Sylvain pour dire que tu as créé plusieurs instances de la classe NumeroCase. Ce n'est pas le cas ? et si oui pourquoi
? Eclaire-moi ! "toto" a écrit dans le message news: wTnVb.8409$
"Sylvain" a écrit dans le message de news:wibVb.8305$
Pb de débutant Tu n'as pas créé plusieurs classes NumeroCase1,NumeroCase2 mais un constructeur avec un parametre.
Dans la nouvelle version 1.5 de java, je crois qu'il y a les enumérations.
Débutant..ouais moins que vous !!
Le problème ne vient pas de ma classe d'énumération La classe NuméroCase, elle provient d'un design pattern, bien valide. Ici j'ai fait du copier coller à partir dudit design pattern.
Donc avant de répondre, il faut être plus sûr de son niveau, monsieur Sylvain.
Hop autant pour moi; vous avez tous les 2 raison :)
Tu as raison de dire que tu fais une enumeration.
Sylvain a raison de dire que tu n'as pas cree plusieurs classes.
Vous avez raison de me dire que mon post sert à rien aussi :P
Je ferais mieux la prochaine fois...
"news.wanadoo.fr" <elurin@free.fr> a écrit dans le message news:
c08cvd$d3q$2@news-reader1.wanadoo.fr...
Ben moi je me fous qu'on me prenne pour un debutant ou un gourou. La
preuve
? ^^
Je serais assez d'accord avec Sylvain pour dire que tu as créé plusieurs
instances de la classe NumeroCase. Ce n'est pas le cas ? et si oui
pourquoi
? Eclaire-moi !
"toto" <mapson@tele2.fr> a écrit dans le message news:
wTnVb.8409$zm5.5598@nntpserver.swip.net...
"Sylvain" <slongepee@tele2.fr> a écrit dans le message de
news:wibVb.8305$zm5.5498@nntpserver.swip.net...
Pb de débutant
Tu n'as pas créé plusieurs classes NumeroCase1,NumeroCase2 mais un
constructeur avec un parametre.
Dans la nouvelle version 1.5 de java, je crois qu'il y a les
enumérations.
Débutant..ouais moins que vous !!
Le problème ne vient pas de ma classe d'énumération
La classe NuméroCase, elle provient d'un design pattern,
bien valide. Ici j'ai fait du copier coller à partir dudit design
pattern.
Donc avant de répondre, il faut être plus sûr de son niveau, monsieur
Sylvain.
Hop autant pour moi; vous avez tous les 2 raison :) Tu as raison de dire que tu fais une enumeration. Sylvain a raison de dire que tu n'as pas cree plusieurs classes. Vous avez raison de me dire que mon post sert à rien aussi :P Je ferais mieux la prochaine fois...
"news.wanadoo.fr" a écrit dans le message news: c08cvd$d3q$
Ben moi je me fous qu'on me prenne pour un debutant ou un gourou. La preuve
? ^^ Je serais assez d'accord avec Sylvain pour dire que tu as créé plusieurs instances de la classe NumeroCase. Ce n'est pas le cas ? et si oui pourquoi
? Eclaire-moi ! "toto" a écrit dans le message news: wTnVb.8409$
"Sylvain" a écrit dans le message de news:wibVb.8305$
Pb de débutant Tu n'as pas créé plusieurs classes NumeroCase1,NumeroCase2 mais un constructeur avec un parametre.
Dans la nouvelle version 1.5 de java, je crois qu'il y a les enumérations.
Débutant..ouais moins que vous !!
Le problème ne vient pas de ma classe d'énumération La classe NuméroCase, elle provient d'un design pattern, bien valide. Ici j'ai fait du copier coller à partir dudit design pattern.
Donc avant de répondre, il faut être plus sûr de son niveau, monsieur Sylvain.
toto
Non mais ce qui m'a agacé c'est que Sylvain indique que la version 1.5 va proposer l'énumération...
Très bien, mais en attendant, je fais quoi ? je passe au C# ?
ça réponse n'était pas constructive.
voilà tout.
Tandis que Régis m'a proposé plusieurs solutions.
On voit bien les deux types d'approches pour une réponse sur un tel forum
Soit : "petit débutant laisse moi éclairer ta nullité" Soit :"petit débutant ta nullité peut nous éclairer"
Non mais ce qui m'a agacé c'est que Sylvain
indique que la version 1.5 va proposer
l'énumération...
Très bien, mais en attendant, je fais quoi ?
je passe au C# ?
ça réponse n'était pas constructive.
voilà tout.
Tandis que Régis m'a proposé plusieurs solutions.
On voit bien les deux types d'approches pour
une réponse sur un tel forum
Soit : "petit débutant laisse moi éclairer ta nullité"
Soit :"petit débutant ta nullité peut nous éclairer"