Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2362 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  classLoader forName : question comme ça ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

classLoader forName : question comme ça ?

n°748970
FarookFree​man
Posté le 02-06-2004 à 15:12:18  profilanswer
 

Les chargeurs de classes, c'est vraiment excellent.
 
Du genre,  
 
Class maclasse=aClassLoader.loadClass("java.lang.String" );
Object ob=maclasse.newInstance();

c'est bien sympathique.
 
Mais
 
N'existe t-il pas un chargeur qui cherche tout seul dans tous les packages
s'il n'y a pas une classe String (qui lancerait une exception s'il y en plusieurs ou qui prendrait la première.)
Finalement, ceci pour ne pas avoir à se préoccuper des packages :
Class maclasse=aClassLoader.loadClass("java.lang.String" );
Object ob=maclasse.newInstance();

 
Sinon j'ai un problème quand je fais une nouvelle instance de la classe Integer : java.lang.InstantiationException: java.lang.Integer. Je ne sais pas trop comment résoudre le problème proprement ...  :)  
 
Un lecteur pourrait-il m'aider ?
 

mood
Publicité
Posté le 02-06-2004 à 15:12:18  profilanswer
 

n°749014
lorill
Posté le 02-06-2004 à 15:42:44  profilanswer
 

Integer prend un argument, newInstance() ne peut pas marcher sans.
 
http://java.sun.com/j2se/1.4.2/doc [...] teger.html
 
sur la classe, utilise getConstructor(Class[] types)
 
http://java.sun.com/j2se/1.4.2/doc [...] Class.html
 

n°749018
FarookFree​man
Posté le 02-06-2004 à 15:52:32  profilanswer
 

Merci pour le deuxieme point.  
Je viens de le faire.
OKI d'ac ca marche.  
 
Et pour le premier point ... quelqu'un aurait-il une idée ?

n°749020
El_gringo
Posté le 02-06-2004 à 15:54:50  profilanswer
 

FarookFreeman a écrit :

Merci pour le deuxieme point.  
Je viens de le faire.
OKI d'ac ca marche.  
 
Et pour le premier point ... quelqu'un aurait-il une idée ?


 
Je suis pas sur d'avoir compris : tu voudrais un class loader qui permet de ne pas préciser les packages ? J'en vois pas trop l'intéret : c'est pas  plus compliqué d'écrire "java.lang.String" que "String". Et puis, les packages, ça à un intéret quand même, que t'évoques d'ailleurs : les conflits de noms de classes.

n°749027
benou
Posté le 02-06-2004 à 16:00:33  profilanswer
 

FarookFreeman a écrit :

N'existe t-il pas un chargeur qui cherche tout seul dans tous les packages


non.
 
le nom simple d'une classe (sans les package) est une simplification pour l'écriture du code (qui se base sur la recherche séquantiel parmis les import). Quand tu demande à charger une classe, tu dois utiliser le nom réel de la classe. Le nom court n'a pas de sens dans ce cas ... Il n'y a d'ailleur pas de notion équivalent au import qui permettrait celà ... Pour imiter ce comportement, ce serait à toi de boucler sur une suite de package dans laquelle la classe pourrait se trouver ...


---------------
ma vie, mon oeuvre - HomePlayer
n°749180
sircam
I Like Trains
Posté le 02-06-2004 à 17:26:25  profilanswer
 

benou a écrit :

non.
 
le nom simple d'une classe (sans les package) est une simplification pour l'écriture du code (qui se base sur la recherche séquantiel parmis les import). Quand tu demande à charger une classe, tu dois utiliser le nom réel de la classe. Le nom court n'a pas de sens dans ce cas ... Il n'y a d'ailleur pas de notion équivalent au import qui permettrait celà ... Pour imiter ce comportement, ce serait à toi de boucler sur une suite de package dans laquelle la classe pourrait se trouver ...


+1, et je ne vois pas le gain recherché. [:belgarath]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°749262
FarookFree​man
Posté le 02-06-2004 à 18:26:41  profilanswer
 

J'ai bien entendu ce que vous dites et je suis d'accord.
 
Mais en quoi quelqu'un n'aurait-il pas pu programmer une API qui va chercher dans tous les packages un nom de classe, qui montre les packages qui la contiennent, et en charge une instance selon des informations supplémentaires données par l'utilisateur(comme justement le bon package par exemple).
 
Reste que, pour faire simple, le but recherché étais de proposer à l'utilisateur des noms de classes communes dans les packages standards, sans qu'il n'ai à écrire par exemple le "java.lang." ou le "java.util.".
Le but étant de spécifier un attribut dans un petit fichier XML qui revient assez souvent.
Et donc d'éviter d'avoir attr=java.lang.Integer à la place de Integer dans les balises
 
 
Du coup, j'ai changé ma vision : je vais faire un adaptateur qui traduit Integer en java.lang.Integer,Float en java.lang.Float, etc...

n°749268
the real m​oins moins
Posté le 02-06-2004 à 18:34:19  profilanswer
 

* commons-discovery fait qqch de semblable: il cherche les implementations d'une interface donnée
* ctrl-n dans intellij-idea fait exactement ce que tu demandes, donc en effet ça a déjà été codé [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°749273
sircam
I Like Trains
Posté le 02-06-2004 à 18:40:36  profilanswer
 

the real moins moins a écrit :

* ctrl-n dans intellij-idea fait exactement ce que tu demandes, donc en effet ça a déjà été codé [:itm]


Aaaah ouais ! J'avais pas pensé à ça  :sol:


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°749280
benou
Posté le 02-06-2004 à 18:43:51  profilanswer
 

FarookFreeman a écrit :

Du coup, j'ai changé ma vision : je vais faire un adaptateur qui traduit Integer en java.lang.Integer,Float en java.lang.Float, etc...


je te conseille de te limiter au java.lang ...


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le 02-06-2004 à 18:43:51  profilanswer
 

n°749556
sircam
I Like Trains
Posté le 02-06-2004 à 21:13:46  profilanswer
 

benou a écrit :

je te conseille de te limiter au java.lang ...


Espèrons simplement que qqn n'aura pas la bonne idée de créer mypack.Integer extends java.lang.Integer, car là tu pourrais regretter ton geste. [:belgarath]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°749562
benou
Posté le 02-06-2004 à 21:16:06  profilanswer
 

sircam a écrit :

Espèrons simplement que qqn n'aura pas la bonne idée de créer mypack.Integer extends java.lang.Integer, car là tu pourrais regretter ton geste. [:belgarath]


je vois pas bien pourquoi ...


---------------
ma vie, mon oeuvre - HomePlayer
n°749571
sircam
I Like Trains
Posté le 02-06-2004 à 21:22:09  profilanswer
 

benou a écrit :

je vois pas bien pourquoi ...


Moi non plus d'ailleurs  [:alien2k]  
 
Ca poserait vraiment un problème si on avait Integer extends java.lang.Integer, mais ce serait déjà vachement pas malin à la base, hein.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°749591
lorill
Posté le 02-06-2004 à 21:41:30  profilanswer
 

sircam a écrit :

Moi non plus d'ailleurs  [:alien2k]  
 
Ca poserait vraiment un problème si on avait Integer extends java.lang.Integer, mais ce serait déjà vachement pas malin à la base, hein.


java.lang.Integer est final  [:sinclaire]

n°749595
FarookFree​man
Posté le 02-06-2004 à 21:46:29  profilanswer
 

benou a écrit :

je te conseille de te limiter au java.lang ...


 
Non je n'ai pas été clair apparemment.
Je vais faire un fichier de correspondance entre la valeur de mes attributs dans mon fichier XML et sa classe java associée.
Excusez-moi pour le manque de clareté de mes propos.

n°749599
FarookFree​man
Posté le 02-06-2004 à 21:48:43  profilanswer
 

the real moins moins a écrit :

* commons-discovery fait qqch de semblable: il cherche les implementations d'une interface donnée
* ctrl-n dans intellij-idea fait exactement ce que tu demandes, donc en effet ça a déjà été codé [:itm]


 
commons-discovery : c a l'air de ce que cherchais , je le testerais
intellij-idea : sans l'interface graphique et avec le code source c'est ça en gros
Merci

n°749612
benou
Posté le 02-06-2004 à 21:57:41  profilanswer
 

FarookFreeman a écrit :

Non je n'ai pas été clair apparemment.
Je vais faire un fichier de correspondance entre la valeur de mes attributs dans mon fichier XML et sa classe java associée.
Excusez-moi pour le manque de clareté de mes propos.


j'ai bien compris (enfin je crois), mais qu'est ce qui t'embete dans le fait de mettre le nom de classe complet ?


---------------
ma vie, mon oeuvre - HomePlayer
n°749708
vivelec
Posté le 02-06-2004 à 23:21:36  profilanswer
 

Il est effectivement possible d'implémenter ton propre class loader qui scan dans tous les jars ou dans les directory que tu auras spécifiées, les classes que tu recherches.
Tout comme il est possible de modifier dynamiquement une class sans avoir à redémarrer la JVM.

n°750138
FarookFree​man
Posté le 03-06-2004 à 09:32:27  profilanswer
 

benou a écrit :

j'ai bien compris (enfin je crois), mais qu'est ce qui t'embete dans le fait de mettre le nom de classe complet ?


 
Ba en fait, plus rien maintenant. Donc plus rien ne m'empêche de mettre le nom complet et ça ne m'embête pas non plus. Par contre, ça aurait embêté les utilisateurs de taper à chaque fois le chemin complet.  
 
Les utilisateurs n'ont pas à savoir de quels packages il s'agit et ne connaissent à priori rien au java. C'est pour ça que finalement je finis par créer un fichier d'adaptation entre ce que veux l'utilisateur comme type (entier, float) et la classe associée en java (avec le chemin complet)
 
En plus, vu que ces types se retrouvent assez fréquemment dans un fichier XML, il vaut mieux qu'ils soit assez courts...

n°750145
FarookFree​man
Posté le 03-06-2004 à 09:35:49  profilanswer
 

vivelec a écrit :

Il est effectivement possible d'implémenter ton propre class loader qui scan dans tous les jars ou dans les directory que tu auras spécifiées, les classes que tu recherches.
Tout comme il est possible de modifier dynamiquement une class sans avoir à redémarrer la JVM.


 
Premier point. Oui c'est ça et je cherchais les implémentations existantes ce que m'a donné the real moins moins.
Le deuxième point est intéressant mais peut être trop complexe pour ce que je veux faire.  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  classLoader forName : question comme ça ?

 

Sujets relatifs
[Java] question sur le Timer de javax.swingquestion heritage et appel de fonctions membres
[ASP.Net] Question de performance ?question sur les demons
Question sur les JPanel [résolu] + question sur les listeners [résolu]Question sur Apache ?
question a 30 centQuestion sur la compilation
[ClassLoader][Cast] pb de cast - 2 ClassLoader différents[ORACLE]Question trigger before insert : comment ne pas insérer ?
Plus de sujets relatifs à : classLoader forName : question comme ça ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR