158 votes

Constructeur dans une interface ?

Je sais qu'il n'est pas possible de définir un constructeur dans une interface. Mais je me demande pourquoi, car je pense que cela pourrait être très utile.

Ainsi, vous pouvez être sûr que certains champs d'une classe sont définis pour chaque implémentation de cette interface.

Considérons par exemple la classe de messages suivante :

public class MyMessage {

   public MyMessage(String receiver) {
      this.receiver = receiver;
   }

   private String receiver;

   public void send() {
      //some implementation for sending the mssage to the receiver
   }
}

Si je définis une interface pour cette classe afin d'avoir d'autres classes qui mettent en œuvre l'interface de message, je ne peux définir que la méthode d'envoi et non le constructeur. Comment puis-je donc m'assurer que chaque implémentation de cette classe possède réellement un ensemble de récepteurs ? Si j'utilise une méthode comme setReceiver(String receiver) Je ne peux pas être sûr que cette méthode soit réellement appelée. Dans le constructeur, je pourrais m'en assurer.

3voto

Denis Vasilenko Points 408

Si vous voulez vous assurer que chaque implémentation de l'interface contient le champ spécifique, il suffit de vous devez ajouter à votre interface le récupérateur de ce champ. :

interface IMyMessage(){
    @NonNull String getReceiver();
}
  • il n'y a pas de rupture de l'encapsulation
  • il fera savoir à tous ceux qui utilisent votre interface que la Receiver doit être passé à la classe d'une manière ou d'une autre (soit par le constructeur, soit par le setter).

1voto

Yishai Points 42417

Les dépendances qui ne sont pas référencées dans les méthodes d'une interface doivent être considérées comme des détails d'implémentation, et non comme quelque chose que l'interface impose. Bien sûr, il peut y avoir des exceptions, mais en règle générale, vous devez définir votre interface comme ce que le comportement est censé être. L'état interne d'une implémentation donnée ne devrait pas être une préoccupation de conception de l'interface.

1voto

Aasif Ali Points 11

C'est parce que les interfaces ne permettent pas de définir le corps de la méthode, mais nous devrions définir le constructeur dans la même classe car les interfaces ont par défaut un modificateur abstrait pour toutes les méthodes à définir. C'est pourquoi nous ne pouvons pas définir le constructeur dans les interfaces.

0voto

JSBձոգչ Points 25069

Ver cette question pour le pourquoi (extrait des commentaires).

Si vous avez vraiment besoin de faire quelque chose comme ça, vous pouvez préférer une classe de base abstraite plutôt qu'une interface.

0voto

RoboAlex Points 1326

En C++, les interfaces peuvent avoir des constructeurs statiques. Voir este .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X