Se référant à “ceci” en appelant super constructeur?

J’ai une classe A et j’écris une sous-classe B. A n’a qu’un seul constructeur qui est paramétré. B doit appeler ce super constructeur de A. Maintenant, je veux utiliser un object comme paramètre. Cet object doit appeler une méthode de B. Donc, l’object paramètre doit contenir une référence de B ou doit être une classe interne.

public B(){ super.(new parameter(this)) } 

Maintenant, quand je veux invoquer le constructeur comme … Eclipse dit:

Impossible de faire référence à ‘this’ ni ‘super’ tout en appelant explicitement un constructeur

La seule chose que je vois pour contourner cela, est une méthode set, pour injecter l’instance “this” dans l’object paramètre. Je ne voudrais pas éditer la super-classe.

Voyez-vous un meilleur moyen de contourner cela?

Le compilateur vous empêche vraiment de vous tirer dans le pied ici. B n’est pas entièrement construit avant l’appel du super constructeur. Par conséquent, si vous transmettez cela (si le compilateur le permet) comme référence et qu’il appelle une méthode sur B, B serait dans un état non valide et provoquerait toutes sortes de vilains problèmes (en fait, A n’est toujours pas initialisé, ni aucune classe dans la chaîne, y compris Object).

La solution évidente consiste à fournir la fonctionnalité en dehors de B et à la transmettre au constructeur du paramètre. Des solutions spécifiques dépendront du problème spécifique, mais une classe nestede statique dans B (elle doit être statique pour la même raison – une classe interne a une référence implicite à l’instance de classe externe) pourrait peut-être fournir cette fonctionnalité. Peut-être devriez-vous repenser la relation entre le paramètre B et sa super classe. Tout dépend du cas.