{JAVA} reflexivite et generics
sechs
Messages postés
5
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
Je cherche un moyen de connaitre le type de template/generics d'une list via la reflexivite
est t'il possible de connaitre le type du template au runtime pour pouvoir l'instancier via Class.forname(String templateClassName);
Merci de votre aide!
Je cherche un moyen de connaitre le type de template/generics d'une list via la reflexivite
est t'il possible de connaitre le type du template au runtime pour pouvoir l'instancier via Class.forname(String templateClassName);
Merci de votre aide!
A voir également:
- {JAVA} reflexivite et generics
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
1 réponse
Je pense qu'il faut explicitement passer la classe, ou au minimum un objet de la classe du template, pour permettre de connaître ce type.
Attention : l'instanciation dynamique n'est pas toujours possible, il faut que le constructeur sans argument existe, ou alors invoquer un constructeur quelconque mais en lui fournissant dynamiquement des arguments (auquel il faudra aussi une valeur)
Exemple :
Attention : l'instanciation dynamique n'est pas toujours possible, il faut que le constructeur sans argument existe, ou alors invoquer un constructeur quelconque mais en lui fournissant dynamiquement des arguments (auquel il faudra aussi une valeur)
Exemple :
public class Toto
{
private static int n = 0;
private int id = n++;
public String toString()
{
return String.format("id=%d",id);
}
}
public class Test
{
public static <E> ArrayList<E> create(int n, E obj)
{
return create(n,(Class<E>) obj.getClass());
}
public static <E> ArrayList<E> create(int n, Class<E> classe)
{
System.out.println(classe);
ArrayList<E> liste = new ArrayList<E>();
for (int i=0; i<n; i++)
{
try
{
liste.add((E) classe.newInstance());
}
catch (InstantiationException | IllegalAccessException e)
{
System.err.println(e);
liste.add(null);
}
}
return liste;
}
public static void main(String[] args)
{
ArrayList<Toto> liste = create(5,Toto.class);
for (int i=0; i<liste.size(); i++)
System.out.println(liste.get(i).toString());
liste = create(5,new Toto());
for (int i=0; i<liste.size(); i++)
System.out.println(liste.get(i).toString());
}
}
pour l'instanciation dynamique on est au courant.
Dans notre cas il est difficile d'avoir une instance de l'objet template,
on récupère nos infos sur une base sql et on a une instance vide d'une class totalement inconnue qu'on doit remplir via introspection donc le but c'est d'imposer a l'utilisateur développeur un minimum de contraintes comme nous donner une instance ou le nom du template...
mais après recherches il semble que le JAVA ne permette pas ca donc on va être oblige de faire comme ca
Merci beaucoup!
Pour plus d'infos regarde : Restrictions on Generics, Cannot Create Instances of Type Parameters