Réfléxivité - Comment transtyper un objet de type Object en une liste de type dy [Résolu]

Signaler
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
-
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
-
Salut,

Je veux remplir une table avec des données provenant de plusieurs tables dont les types correspondants descendent tous de la même classe.

Class Fruit{}

Class Pomme extends Fruit {}
Class Poire extends Fruit {}

etc.

public setData(String className) {
    try{
        Class<?> fruitClass = Class.forName(className);
        try{
            Method method=fruitClass.getDeclaredMethod("getAll", new Class[] {String.class, String.class});
            if (method != null) {
                Object fruits = method.invoke(null, new Object[] {"hostname", "dbname"}); // null, il s'agit d'une méthode static        
                List<fruitClass> fruitsList = (List<fruitClass>) fruits; // ça ne passe pas
                this.tableViewer.add(fruitsList);
            }            
        }
        catch(SecurityException e){}
        catch(NoSuchMethodException e){}
        catch(IllegalArgumentException e){}
        catch(IllegalAccessException e){}
        catch(InvocationTargetException e){}

    } catch(ClassNotFoundException e){}
}

Comment puis-je transtyper l'object de retour d'invoke, en une liste de type List<? extends Fruit>, dont je connais le type (Class.forName) ?

1 réponse

Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
15
ok, j'ai trouvé,

Method method=fruitClass.getDeclaredMethod("getAll", new Class[] {String.class, String.class});
if (method != null) {
    Object fruits = method.invoke(null, new Object[]
{"hostname", "dbname"}); // null, il s'agit d'une méthode static        
    this.tableViewer.add((List<? extends Fruits) fruits).toArray());
}

Juste un truc, je suis obligé de mettre un @SuppressWarnings("unchecked") sur la méthode.
Qui sait pourquoi et comment supprimer cette annotation ?