Comment sauvegarder le resultat!!!
amani
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
J'ai pas trouvé un code pour récupérer les types des paramètres des méthodes alors j'ai crée cette méthode:
import java.lang.reflect.Method;
public class Test2 {
public static String loginAs(DefaultUser username,String password)
{
return "clickToLink";
}
static String[] types;
static String g;
public static String[] parametersTypes(){ //ok!!!
//a table that contains parameters types
int j=0;
try
{
for(Method method:Test2.class.getMethods())
{
java.lang.reflect.Type[] typ=method.getParameterTypes();
for(int i=0;i<=typ.length-1;i++)
{
int index=typ[i].toString().lastIndexOf(".");//to catch the last //item that contains the type of the parameter
String k=typ[i].toString().substring(index+1);//extract the //last item that began with the point!
System.out.println(k);
//types[j]=k;// erreur si j'enléves ces commentaires!!!
//System.out.println(types[j]);//aussi
//j++;//aussi
}
}
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
return types;
}
/**
* @param args
*/
public static void main(String[] args) {
String[] values=Test2.parametersTypes();
}
}
Cette méthode fonctionne bien et elle retourne tout les types des paramètres de toutes les méthodes dans la classe Test2.
Mais lorsque j'ai essayé d'enregistrer les valeurs trouvé dans un tableau types cela ne fonctionne pas et retourne un erreur:java.lang.NullPointerException, cela se produit lorsque j'enlève les commentaires des trois lignes et je commente celle que les précède cela montre que tableau "types" n'est pas entrain de récupérer les valeurs trouvés, malgré que la méthode fonctionne très bien!!!
J'ai pas trouvé un code pour récupérer les types des paramètres des méthodes alors j'ai crée cette méthode:
import java.lang.reflect.Method;
public class Test2 {
public static String loginAs(DefaultUser username,String password)
{
return "clickToLink";
}
static String[] types;
static String g;
public static String[] parametersTypes(){ //ok!!!
//a table that contains parameters types
int j=0;
try
{
for(Method method:Test2.class.getMethods())
{
java.lang.reflect.Type[] typ=method.getParameterTypes();
for(int i=0;i<=typ.length-1;i++)
{
int index=typ[i].toString().lastIndexOf(".");//to catch the last //item that contains the type of the parameter
String k=typ[i].toString().substring(index+1);//extract the //last item that began with the point!
System.out.println(k);
//types[j]=k;// erreur si j'enléves ces commentaires!!!
//System.out.println(types[j]);//aussi
//j++;//aussi
}
}
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
return types;
}
/**
* @param args
*/
public static void main(String[] args) {
String[] values=Test2.parametersTypes();
}
}
Cette méthode fonctionne bien et elle retourne tout les types des paramètres de toutes les méthodes dans la classe Test2.
Mais lorsque j'ai essayé d'enregistrer les valeurs trouvé dans un tableau types cela ne fonctionne pas et retourne un erreur:java.lang.NullPointerException, cela se produit lorsque j'enlève les commentaires des trois lignes et je commente celle que les précède cela montre que tableau "types" n'est pas entrain de récupérer les valeurs trouvés, malgré que la méthode fonctionne très bien!!!
A voir également:
- Comment sauvegarder le resultat!!!
- Resultat foot - Télécharger - Vie quotidienne
- Sauvegarder favoris chrome - Guide
- Sauvegarder sms iphone - Guide
- Sauvegarder favoris firefox - Guide
- Comment sauvegarder un mail - Guide
1 réponse
Ton erreur vient que ton objet String[] types n'est pas initialisé !
Il te faut faire un new String[n] avant de pouvoir faire types[j]...
Mais il n'y a pas de raison qu'il soit static alors qu'il devrait être interne à la méthode !
Par contre comme tu ne connais pas sa taille à l'avance il est préférable d'utiliser une Collection, comme par exemple des List ou des Set selon si tu acceptes les doublons ou non.
Remarque : getParameterTypes() renvoie un tableau de Class<?> ce qui te permet d'utiliser la méthode getSimpleName et t'éviter ainsi la manipulation de substring. Mais si tu enlèves les packages tu peux te retrouver avec plusieurs classes différentes qui ont le même nom, par exemple java.util.Date et java.sql.Date, ce qui peut être ambiguë...
Il te faut faire un new String[n] avant de pouvoir faire types[j]...
Mais il n'y a pas de raison qu'il soit static alors qu'il devrait être interne à la méthode !
Par contre comme tu ne connais pas sa taille à l'avance il est préférable d'utiliser une Collection, comme par exemple des List ou des Set selon si tu acceptes les doublons ou non.
Remarque : getParameterTypes() renvoie un tableau de Class<?> ce qui te permet d'utiliser la méthode getSimpleName et t'éviter ainsi la manipulation de substring. Mais si tu enlèves les packages tu peux te retrouver avec plusieurs classes différentes qui ont le même nom, par exemple java.util.Date et java.sql.Date, ce qui peut être ambiguë...
import java.lang.reflect.Method;
import java.util.LinkedList;
public class Test2
{
public static String[] parametersTypes(Class<?> classe)
{
LinkedList<String> liste = new LinkedList<String>();
for(Method method : classe.getMethods())
{
Class<?>[] typ = method.getParameterTypes();
for(int i=0; i<typ.length; i++)
{
String k = typ[i].getCanonicalName();
//System.out.println(k);
liste.add(k);
}
}
return liste.toArray(new String[liste.size()]);
}
public static void main(String[] args)
{
String[] values=parametersTypes(Test2.class);
for (String str : values)
System.out.println(str);
}
}