J'ai une classe abstraite A qui définit des méthodes abstraites. Cela signifie que, pour qu'une classe soit instanciable, toutes les méthodes abstraites doivent être implémentées.
Je voudrais que toutes mes sous-classes implémentent un constructeur avec 2 ints comme paramètres.
Déclarer un constructeur va à l'encontre de mon objectif, car je veux que le constructeur soit défini dans les sous-classes et je ne sais rien de l'implémentation. De plus, je ne peux pas déclarer un constructeur comme étant abstrait ;
Y a-t-il un moyen de le faire ?
Exemple de ce que je veux :
Disons que je suis en train de définir l'API d'une classe Matrix. Dans mon problème, les matrices ne peuvent pas modifier leurs dimensions.
Pour qu'une matrice soit créée, je dois fournir sa taille.
Par conséquent, je veux que tous mes implémenteurs fournissent au constructeur la taille en tant que paramètre. Ce constructeur est motivé par le problème, et non par un souci d'implémentation. L'implémentation peut en faire ce qu'elle veut, à condition de conserver toute la sémantique des méthodes.
Disons que je veux fournir une implémentation de base de la fonction invert()
dans ma classe abstraite. Cette méthode va créer une nouvelle matrice avec this
dimensions inversées. Plus précisément, comme il est défini dans la classe abstraite, il créera une nouvelle instance de la même classe en tant que this
en utilisant un constructeur qui prend deux ints. Comme il ne connaît pas l'instance, il utilisera la réflexion (getDefinedConstructor) et je veux un moyen de garantir que je l'obtiendrai et que ce sera significatif pour l'implémentation.
0 votes
Une solution élégante peut être trouvée ici : stackoverflow.com/questions/6028526/