2017-02-15 2 views
1
public interface Example<E> 
{ 
    E get(int index); 

    default E get() 
    { 
     return get(0); 
    } 
} 

Ce serait la conception initiale de l'interface. Est-ce quelque chose comme ceci une utilisation acceptable d'une méthode par défaut (essentiellement pour les arguments par défaut), ou devraient-ils seulement être utilisés à l'avenir pour des fonctionnalités supplémentaires?Est-ce une utilisation acceptable d'une méthode d'interface par défaut Java?

+1

La ligne officielle que j'ai entendue d'Oracle est qu'elle est principalement destinée à de futures fonctionnalités ajoutées. Mais il existe des interfaces nouvelles dans Java 8 qui incluent des méthodes par défaut, il semble donc qu'elles ne suivent pas leurs propres conseils. :) – yshavit

+4

Cela me semble bien; Je n'aurais pas de problèmes avec cela à l'examen du code. Seul le commentaire serait nommé - peut-être 'getFirst'? Aussi aurait besoin de documenter qu'il «jeter» quelque chose si la chose est vide - ce qui m'amène à mon dernier point; ceci ne compile pas - manque le nom dans la déclaration 'interface'. –

+0

Vous pouvez ajouter la méthode par défaut demain, quand c'est le futur :) – ZhongYu

Répondre

1

Il est officiellement déclaré que le but est d'assurer la rétrocompatibilité avec les clients implémentant l'ancienne interface (sinon ils devraient tous revenir en arrière et implémenter cette nouvelle méthode). Il a seulement été ajouté à cet effet et pas à l'origine une caractéristique de Java. Mais honnêtement, ce n'est pas une grosse affaire et la facilité d'utilisation rend certainement acceptable à mon avis.

1

Les officiels sources que je pouvais trouver d'Oracle à propos de l'utilisation prévue de la méthode d'interface default est (source):

Les méthodes par défaut vous permettent d'ajouter de nouvelles fonctionnalités aux interfaces de vos bibliothèques et d'assurer la compatibilité binaire avec du code écrit pour les anciennes versions de ces interfaces.

Cependant, je la traite comme étant la même que celle d'une classe abstract, définissant abstract méthodes qui doivent être mises en œuvre par les sous-classes (dans ce cas, les méthodes d'interface sans implémentation par défaut), ainsi que de fournir des méthodes concrètes peut être remplacé par des sous-classes (méthode d'interface par défaut).