2017-03-28 1 views
0

Disons que nous avons une classe abstraite appelée Figure et une méthode statique addFigure à l'intérieur. addFigure doit remplir une liste existante avec des objets de type spécifié par l'utilisateur. Nous avons ensuite une sous-classe, Square.Remplissage d'une liste générique avec les objets d'une sous-classe d'une classe abstraite

public class Square extends AbstractFigure { 
} 

L'invocation est la suivante:

public class GenericsProblem{ 

    public static void main(String[] args) { 

     ArrayList<Square> arrayListSquare = new ArrayList<>(); 

     AbstractFigure.addFigure(arrayListSquare, Square.class, 12); 
    } 
} 

Le code fonctionne correctement et la liste est remplie de Squares, comme je suppose.

Maintenant, je voudrais à nouveau faire AbstractFigure donc au lieu de travailler sur une liste existante, il va créer et retourner un, comme dans:

public abstract class AbstractFigure { 

    public static <T extends AbstractFigure> List<T> addFigure(Class<T> clazz, int n) 
    { 
     List<T> genList = new ArrayList<>(); 

     for (int i = 0; i < n; i++) { 

      try { 

       T obj = clazz.newInstance(); 
       genList.add(obj); 

      } catch (InstantiationException ex) { 
       ex.printStackTrace(); 
      } catch (IllegalAccessException ex) { 
       ex.printStackTrace(); 
      } 
     } 
     return genList; 
    } 
} 

Est-ce possible et si oui, comment pourrais-je l'invoquer?

Répondre

1

Oui, c'est possible. Vous avez juste besoin d'assigner la valeur de retour à une variable.

List<Square> arrayListSquare = addFigure(Square.class, 12); 
+0

Oh mon Dieu, bien sûr. J'ai continué à essayer de l'assigner avec 'AbstractFigure.addFigure' au lieu d'un' addFigure' normal. – ForInfinity

+1

Puisque '' 'addFigure''' est statique, vous devez toujours inclure' '' AbstractFigure.''' devant, sauf si vous avez fait une importation statique bien sûr. –