forName java lang Integer

Le
artintel
Bonjour,

Un test avec la classe String fonctionne, mais ce qui est supose
marcher avec une autre classe comme Integer ne marche pas Si je
prend le code ci dessous et que je remplace :

Class MaClasse = Class.forName("java.lang.String");
par

Class MaClasse = Class.forName("java.lang.Integer");

J'ai le message d'erreur :

Exception : java.lang.Integer Cause : null

Je ne vois pas pourquoi ca ne marche pas ?


public class TestForName
{

public static Object functionForName() throws Exception
{
Class MaClasse = Class.forName("java.lang.String");
return MaClasse.newInstance();
}

public static void main(String[] args)
{
try
{
Object objet = functionForName();

if (objet instanceof java.lang.String)
{
objet = "C'est un String";
System.out.println("-System.out.println
objet=>"+objet);
System.out.println("-System.out.println
objet.getClass.getName=>"+objet.getClass().getName());
}
if (objet instanceof java.lang.Integer)
{
objet = 4;
System.out.println("-System.out.println
objet=>"+objet);
System.out.println("-System.out.println
objet.getClass.getName=>"+objet.getClass().getName());
}
if ( !(objet instanceof java.lang.String) && !(objet
instanceof java.lang.Integer) )
{
System.out.println("A pas");
}
}
catch(Exception e)
{
{System.out.println("Exception : "+e.getMessage()+"
Cause : "+e.getCause());}
}
}
}
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Samuel Devulder
Le #19134071
a écrit :
Bonjour,

Un test avec la classe String fonctionne, mais ce qui est supose
marcher avec une autre classe comme Integer ne marche pas... Si je
prend le code ci dessous et que je remplace :

Class MaClasse = Class.forName("java.lang.String");
par

Class MaClasse = Class.forName("java.lang.Integer");

J'ai le message d'erreur :

Exception : java.lang.Integer Cause : null

Je ne vois pas pourquoi ca ne marche pas ...?



Peut être parce qu'il n'existe pas de constructeur d'Integer sans
argument, contrairement à String.

public static Object functionForName() throws Exception
{
Class MaClasse = Class.forName("java.lang.String");
return MaClasse.newInstance();
}


Samuel Devulder
Le #19134061
a écrit :
Bonjour,

Un test avec la classe String fonctionne, mais ce qui est supose
marcher avec une autre classe comme Integer ne marche pas... Si je
prend le code ci dessous et que je remplace :

Class MaClasse = Class.forName("java.lang.String");
par

Class MaClasse = Class.forName("java.lang.Integer");

J'ai le message d'erreur :

Exception : java.lang.Integer Cause : null

Je ne vois pas pourquoi ca ne marche pas ...?



Peut être parce qu'il n'existe pas de constructeur d'Integer sans
argument, contrairement à String.

public static Object functionForName() throws Exception
{
Class MaClasse = Class.forName("java.lang.String");
return MaClasse.newInstance();
}


Christian Laborde
Le #19134531
Exactement. MaClasse.newInstance() est équivalent à
new Integer(). Or il n'existe pas un tel constructeur.

Samuel Devulder a écrit :
a écrit :
Bonjour,

Un test avec la classe String fonctionne, mais ce qui est supose
marcher avec une autre classe comme Integer ne marche pas... Si je
prend le code ci dessous et que je remplace :

Class MaClasse = Class.forName("java.lang.String");
par

Class MaClasse = Class.forName("java.lang.Integer");

J'ai le message d'erreur :

Exception : java.lang.Integer Cause : null

Je ne vois pas pourquoi ca ne marche pas ...?



Peut être parce qu'il n'existe pas de constructeur d'Integer sans
argument, contrairement à String.

public static Object functionForName() throws Exception
{
Class MaClasse = Class.forName("java.lang.String");
return MaClasse.newInstance();
}





--
Christian Laborde
La Révolution citoyenne, c'est sur : http://c.lab.over-blog.com/
Le forum des électrons libres :
http://electrons-libres.forumactif.fr
Les citoyens qui voient Net : http://www.netoyens.info
True E-mail : remove -no-spam-
Sentier des Vinches
CH 1091 Grandvaux
Suisse
artintel
Le #19135811
On 17 avr, 15:49, Christian Laborde wrote:
Exactement. MaClasse.newInstance() est équivalent à
new Integer(). Or il n'existe pas un tel constructeur.

Samuel Devulder a écrit :





> a écrit :
>> Bonjour,

>> Un test avec la classe String fonctionne, mais ce qui est supose
>> marcher avec une autre classe comme Integer ne marche pas... Si je
>> prend le code ci dessous et que je remplace :

>>                 Class MaClasse = Class.forName("java .lang.String");
>> par

>>                 Class MaClasse = Class.forName("java .lang.Integer");

>> J'ai le message d'erreur :

>> Exception : java.lang.Integer Cause : null

>> Je ne vois pas pourquoi ca ne marche pas ...?

> Peut être parce qu'il n'existe pas de constructeur d'Integer sans
> argument, contrairement à String.

>>     public static Object functionForName() throws Exception
>>           {
>>                 Class MaClasse = Class.forName("java .lang.String");
>>                 return MaClasse.newInstance();
>>           }

--
Christian Laborde
La Révolution citoyenne, c'est sur :http://c.lab.over-blog.com/
Le forum des électrons libres :http://electrons-libres.forumactif.fr
Les citoyens qui voient Net :http://www.netoyens.info
True E-mail : remove -no-spam-
Sentier des Vinches
CH 1091 Grandvaux
Suisse- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Effectivement, j'ai trouve sur le net une astuce, ca donne :

public class TestForName
{

public static Object functionForName() throws Exception
{
Class MaClasse = Class.forName("java.lang.Integer");
java.lang.reflect.Constructor constructeur =
MaClasse.getConstructor (new Class [] {Class.forName
("java.lang.String")});
return constructeur.newInstance (new Object [] {"6"});
}

public static void main(String[] args)
{
try
{
Object objet = functionForName();

if (objet instanceof java.lang.String)
{
objet = "C'est un String";
System.out.println("-System.out.println
objet=>"+objet);
System.out.println("-System.out.println
objet.getClass.getName=>"+objet.getClass().getName());
}
if (objet instanceof java.lang.Integer)
{
System.out.println("-System.out.println
objet=>"+objet);
System.out.println("-System.out.println
objet.getClass.getName=>"+objet.getClass().getName());
}
if ( !(objet instanceof java.lang.String) && !(objet
instanceof java.lang.Integer) )
{
System.out.println("A pas");
}
}
catch(Exception e)
{
{System.out.println("Exception : "+e.getMessage()+"
Cause : "+e.getCause());}
}
}
}
Mayeul
Le #19135801
wrote:
a écrit :
Bonjour,
Un test avec la classe String fonctionne, mais ce qui est supose
marcher avec une autre classe comme Integer ne marche pas... Si je
prend le code ci dessous et que je remplace :
Class MaClasse = Class.forName("java.lang.String");
par
Class MaClasse = Class.forName("java.lang.Integer");
J'ai le message d'erreur :
Exception : java.lang.Integer Cause : null
Je ne vois pas pourquoi ca ne marche pas ...?


Peut être parce qu'il n'existe pas de constructeur d'Integer sans
argument, contrairement à String.
public static Object functionForName() throws Exception
{
Class MaClasse = Class.forName("java.lang.String");
return MaClasse.newInstance();
}









Pour information, dans ce cas d'utilisation il est inutile d'appeler
Class.forName(). Cela sert à forcer le chargement d'une classe si elle
n'est pas déjà chargée.

Pour Obtenir l'objet de type Class correspondant à Integer, il suffit de
faire :

Class MaClasse = Integer.class;

Ce qui évite d'utiliser une chaîne de caractère dans laquelle il
pourrait y avoir une typo.

De plus, c'est une meilleure pratique d'utiliser les génériques et
autres simplifications introduites avec Java 1.5. Et c'est aussi une
meilleure pratique de ne laisser que les noms de classe commencer par
une majuscule :

Class<Integer> maClasse = Integer.class;

Donc, le code devient :

Class<Integer> maClasse = Integer.class;

Constructor<Integer> constructeur = maClasse.getConstructor(String.class);

return constructeur.newInstance("6");

--
Mayeul
artintel
Le #19135791
On 17 avr, 17:58, Mayeul
wrote:
>>> a écrit :
>>>> Bonjour,
>>>> Un test avec la classe String fonctionne, mais ce qui est supose
>>>> marcher avec une autre classe comme Integer ne marche pas... Si je
>>>> prend le code ci dessous et que je remplace :
>>>>                 Class MaClasse = Class.forName("ja va.lang.String");
>>>> par
>>>>                 Class MaClasse = Class.forName("ja va.lang.Integer");
>>>> J'ai le message d'erreur :
>>>> Exception : java.lang.Integer Cause : null
>>>> Je ne vois pas pourquoi ca ne marche pas ...?
>>> Peut être parce qu'il n'existe pas de constructeur d'Integer sans
>>> argument, contrairement à String.
>>>>     public static Object functionForName() throws Exception
>>>>           {
>>>>                 Class MaClasse = Class.forName("ja va.lang.String");
>>>>                 return MaClasse.newInstance();
>>>>           }

Pour information, dans ce cas d'utilisation il est inutile d'appeler
Class.forName(). Cela sert à forcer le chargement d'une classe si elle
n'est pas déjà chargée.

Pour Obtenir l'objet de type Class correspondant à Integer, il suffit d e
faire :

Class MaClasse = Integer.class;

Ce qui évite d'utiliser une chaîne de caractère dans laquelle il
pourrait y avoir une typo.

De plus, c'est une meilleure pratique d'utiliser les génériques et
autres simplifications introduites avec Java 1.5. Et c'est aussi une
meilleure pratique de ne laisser que les noms de classe commencer par
une majuscule :

Class<Integer> maClasse = Integer.class;

Donc, le code devient :

Class<Integer> maClasse = Integer.class;

Constructor<Integer> constructeur = maClasse.getConstructor(String.clas s);

return constructeur.newInstance("6");

--
Mayeul- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Ha, ok, j'essaye ca ..... Lundi ;o) Merci
artintel
Le #19175861
On 17 avr, 17:58, Mayeul
wrote:
>>> a écrit :
>>>> Bonjour,
>>>> Un test avec la classe String fonctionne, mais ce qui est supose
>>>> marcher avec une autre classe comme Integer ne marche pas... Si je
>>>> prend le code ci dessous et que je remplace :
>>>>                 Class MaClasse = Class.forName("ja va.lang.String");
>>>> par
>>>>                 Class MaClasse = Class.forName("ja va.lang.Integer");
>>>> J'ai le message d'erreur :
>>>> Exception : java.lang.Integer Cause : null
>>>> Je ne vois pas pourquoi ca ne marche pas ...?
>>> Peut être parce qu'il n'existe pas de constructeur d'Integer sans
>>> argument, contrairement à String.
>>>>     public static Object functionForName() throws Exception
>>>>           {
>>>>                 Class MaClasse = Class.forName("ja va.lang.String");
>>>>                 return MaClasse.newInstance();
>>>>           }

Pour information, dans ce cas d'utilisation il est inutile d'appeler
Class.forName(). Cela sert à forcer le chargement d'une classe si elle
n'est pas déjà chargée.

Pour Obtenir l'objet de type Class correspondant à Integer, il suffit d e
faire :

Class MaClasse = Integer.class;

Ce qui évite d'utiliser une chaîne de caractère dans laquelle il
pourrait y avoir une typo.

De plus, c'est une meilleure pratique d'utiliser les génériques et
autres simplifications introduites avec Java 1.5. Et c'est aussi une
meilleure pratique de ne laisser que les noms de classe commencer par
une majuscule :

Class<Integer> maClasse = Integer.class;

Donc, le code devient :

Class<Integer> maClasse = Integer.class;

Constructor<Integer> constructeur = maClasse.getConstructor(String.clas s);

return constructeur.newInstance("6");

--
Mayeul- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Bonjour,

Oui, daccord, mais ... :o) "l'objet de type Class correspondant à
Integer" c'est vachement abstrait ca ... Un objet de type Class, bon,
a la limite, j'imagine ce que ca peut etre, mais "correspondant" la,
je decroche....
Mayeul
Le #19176191
wrote:
On 17 avr, 17:58, Mayeul
wrote:
a écrit :
Bonjour,
Un test avec la classe String fonctionne, mais ce qui est supose
marcher avec une autre classe comme Integer ne marche pas... Si je
prend le code ci dessous et que je remplace :
Class MaClasse = Class.forName("java.lang.String");
par
Class MaClasse = Class.forName("java.lang.Integer");
J'ai le message d'erreur :
Exception : java.lang.Integer Cause : null
Je ne vois pas pourquoi ca ne marche pas ...?


Peut être parce qu'il n'existe pas de constructeur d'Integer sans
argument, contrairement à String.
public static Object functionForName() throws Exception
{
Class MaClasse = Class.forName("java.lang.String");
return MaClasse.newInstance();
}








Pour information, dans ce cas d'utilisation il est inutile d'appeler
Class.forName(). Cela sert à forcer le chargement d'une classe si elle
n'est pas déjà chargée.

Pour Obtenir l'objet de type Class correspondant à Integer, il suffit de
faire :

Class MaClasse = Integer.class;

Ce qui évite d'utiliser une chaîne de caractère dans laquelle il
pourrait y avoir une typo.

De plus, c'est une meilleure pratique d'utiliser les génériques et
autres simplifications introduites avec Java 1.5. Et c'est aussi une
meilleure pratique de ne laisser que les noms de classe commencer par
une majuscule :

Class<Integer> maClasse = Integer.class;

Donc, le code devient :

Class<Integer> maClasse = Integer.class;

Constructor<Integer> constructeur = maClasse.getConstructor(String.class);

return constructeur.newInstance("6");

--
Mayeul- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Bonjour,

Oui, daccord, mais ... :o) "l'objet de type Class correspondant à
Integer" c'est vachement abstrait ca ... Un objet de type Class, bon,
a la limite, j'imagine ce que ca peut etre, mais "correspondant" la,
je decroche....



Eh bien, disons, clazz tel que :

Class<Integer> clazz = Integer.class

OU

Integer i = new Integer(1);
Class<Integer> clazz = (Class<Integer>) i.getClass();

OU

Class<Integer> clazz = (Class<Integer>) Class.forName("java.lang.Integer");


Dans les 3 cas, clazz contient la même chose. C'est un objet de type
Class, qui représente la classe Integer.

Il vaut mieux l'obtenir en faisant Integer.class parce que :
- c'est plus direct, plus lisible
- i.getClass() nécessite d'avoir une instance d'objet de la classe en
question. Et nécessite un cast générique explicite, aussi : (Class<Integer>)
- Class.forName() sert surtout à faire charger une classe au cas où elle
ne le soit pas déjà. Cela est utile dans des cas assez spécifiques,
comme charger un pilote de base de données. C'est inutile pour Integer
ou pour toute classe qu'on utilise directement dans le programme. Et
puis, il y a risque de faire une typo dans le paramètre "java.lang.Integer".

--
Mayeul
Publicité
Poster une réponse
Anonyme