web-dev-qa-db-fra.com

Pourquoi déclarer une méthode d'interface Java comme abstraite?

J'ai utilisé la fonction de refactoring "pull interface" d'Eclipse aujourd'hui pour créer une interface basée sur une classe existante. La boîte de dialogue proposait de créer toutes les nouvelles méthodes de la nouvelle interface en tant que méthodes "abstraites".

Quel en serait l'avantage?

Je pensais que le fait que vous ayez été autorisé à déclarer des méthodes d'interface comme abstraites était une caractéristique superflue et inoffensive du langage qui n'est pas particulièrement encouragée.

Pourquoi Eclipse prendrait-il en charge un tel style, ou pourquoi quelqu'un choisirait-il volontairement de le faire?

Clarification: je ne demande pas pourquoi les méthodes d'interface sont abstraites, c'est évident. Je me demande pourquoi on choisirait explicitement de les marquer comme abstraits, car s'ils sont dans une interface, ils sont de toute façon abstraits.

139
Uri

Selon la Java Language Specification , le mot clé abstract pour les interfaces est obsolète et ne devrait plus être utilisé. (Section 9.1.1.1)

Cela dit, avec la propension de Java à la compatibilité descendante, je doute vraiment que cela fasse une différence si le mot clé abstract est présent.

143
jdmichal

"L'avantage de cela" (ajouter un résumé sur la déclaration des méthodes d'interface) dans Eclipse serait un ancien problème de compatibilité avec compilateur jdt Eclipse dans jdk1.

Depuis 1.4, les bibliothèques jdk ne contiennent plus de méthodes abstraites par défaut (sur les classes abstraites implémentant des interfaces).
Cela trompe le diagnostic du compilateur Eclipse 1.3 car leur implémentation dépend de leur existence.
Notez que Javac 1.3 refuserait complètement de fonctionner contre 1.4 bibliothèques (en utilisant l'option -bootclasspath).

Étant donné que le compilateur Eclipse est susceptible d'être au niveau de conformité 1.4 (voir Workbench>Preferences>Java>Compiler>JDK Compliance), ou utilisez au moins les bibliothèques de classes 1.3 si vous utilisez le mode de conformité 1.3, la présence de "abstract" n'est pas requise dans la plupart des projets Eclipse actuels.

38
VonC

Extrait de Java SE 7 JLS (Java Language Specification): "Il est autorisé, mais déconseillé pour des raisons de style, de spécifier de manière redondante le modificateur public et/ou abstrait d'une méthode déclarée dans une interface. "

Pour Java SE 5. : "Pour la compatibilité avec les anciennes versions de la plate-forme Java, il est autorisé mais déconseillé, pour des raisons de style, de spécifier de manière redondante le modificateur abstrait pour les méthodes déclarées dans les interfaces. "

37
Will

Selon les méthodes JLS, les interfaces sont abstraites par défaut, donc le mot-clé est redondant. Sachant cela, je ne l'utiliserais jamais pour "éviter l'encombrement de la présentation".

9
Daniel Hiller