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

forName java lang Integer

8 réponses
Avatar
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());}
}
}
}

8 réponses

Avatar
Samuel Devulder
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();
}


Avatar
Samuel Devulder
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();
}


Avatar
Christian Laborde
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
Avatar
artintel
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());}
}
}
}
Avatar
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
Avatar
artintel
On 17 avr, 17:58, Mayeul wrote:
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
Avatar
artintel
On 17 avr, 17:58, Mayeul wrote:
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....
Avatar
Mayeul
wrote:
On 17 avr, 17:58, Mayeul wrote:
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