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?
Oh mon Dieu, bien sûr. J'ai continué à essayer de l'assigner avec 'AbstractFigure.addFigure' au lieu d'un' addFigure' normal. – ForInfinity
Puisque '' 'addFigure''' est statique, vous devez toujours inclure' '' AbstractFigure.''' devant, sauf si vous avez fait une importation statique bien sûr. –