Quand j'étudiais Java SE 8 Gold, c'était un endroit compliqué, alors je l'ai résumé. Il aborde également les interfaces fonctionnelles d'autres types spéciaux primitifs. Note) Contenu pour les candidats Gold
La règle qui résout ce problème est ** "Une interface fonctionnelle avec un type de retour est la méthode correspondante = méthode de base + As + type de retour" ** Il se résume en un mot.
C'est un mot avec des implications que vous pouvez apprendre sur l'interface fonctionnelle dans java.util.function (je l'ai fait moi-même), alors découvrons-le.
Tout d'abord, les bases des bases. Si vous ne vous en souvenez pas, il est assez difficile d'obtenir de l'or. Au contraire, si vous savez cela, vous pouvez comprendre la moitié de la phrase précédente.
Interface fonctionnelle de base | Méthode | La description |
---|---|---|
Consumer<T> | void accept(T) | Reçoit les arguments, traite et ne renvoie pas de résultats, "consommateur" |
Function<T,R> | R apply(T t) | Reçoit un argument et le type spécifié(R)Renvoie le résultat de "En traitement" |
Predicate<T> | boolean test(T t) | Prenez un argument et évaluez-le avec une valeur booléenne, "Affirmation" |
Supplier<T> | T get() | Renvoie uniquement le résultat sans prendre d'arguments, "Fournisseur" |
En passant, en regardant la règle précédente, il est dit: «Le type de retour a été décidé comme étant un».
Veuillez regarder de plus près le tableau ci-dessus.
Ne renvoyez pas de valeur de retour en premier lieu ''
Vous n'avez pas à décider du type de valeur de retour ''
Vous remarquerez qu'il existe une interface fonctionnelle.
Le premier est Consumer <T> '' et le second est
Predicate
En regardant la documentation de l'API Java SE pour java.util.function, il existe des interfaces fonctionnelles telles que IntConsumer et IntPredicate, qui sont des types spécialisés primitifs tels que IntFunction. Ensuite, existe-t-il des méthodes telles que acceptAsInt et testAsInt comme applyAsInt?
La réponse est non.
** Le problème cette fois, ce sont les méthodes associées de Fonction \ <T, R > et Fournisseur \ <T > ** Tout d'abord, gardez à l'esprit. (Dans le problème de Gold, acceptAsInt et testAsInt n'apparaissent même pas comme des options.)
Revenons au sujet principal ici. Est la méthode de IntFunction, qui est un type spécialisé primitif d'interface Function, il suffit d'appliquer ou de applyAsInt ... Comme vous pouvez le voir en lisant les règles, le point est `` si la valeur de retour est tapée. '' Cela peut être vu en regardant la définition de l'interface fonctionnelle jusqu'aux génériques. Il existe trois modèles de base pour les types spécialisés primitifs liés à la fonction, nous allons donc les vérifier ici.
IntFunction<R>
ToIntFunction<T>
DoubleToIntFunction
Un résumé approximatif de la relation entre la signification des génériques ci-dessus et les types d'arguments et de valeurs de retour
<R>: Le type de retour peut être décidé arbitrairement (l'argument est de type int) ''
En d'autres termes, la méthode IntFunction du titre peut décider arbitrairement du type de la valeur de retour, il s'agit donc simplement de ʻapply`` Étant donné que le type de retour de ToIntFunction et DoubleToIntFunction est déterminé par le type int, il devient
ʻapplyAsInt``.
Bien entendu, les autres DoubleFunctions (la méthode s'applique), ToDoubleFunction (la méthode est applyAsDouble), etc. suivent les mêmes règles.
Considérons maintenant la méthode IntSupplier. Étant donné que la méthode IntFunction était juste appliquée Vous pourriez penser que la méthode IntSupplier est juste un get. ** Ne soyez pas dupe **
Vous devez vous rappeler qui était le fournisseur. Le fournisseur \ <T > était un "fournisseur" qui n'a accepté aucun argument et n'a renvoyé que le résultat. En d'autres termes, puisqu'il n'y a pas d'arguments dans l'interface fonctionnelle liée au fournisseur, la partie du type spécialisé primitif IntSupplier qui est déterminée comme étant de type int ne peut être que la valeur de retour.
En conséquence, la méthode correspondante de `ʻIntSupplier est getAsInt``. ** Inversement, la méthode correspondante est obtenue uniquement dans Supplier \ <T > dans le système Supplier. ** ** ~~ (Personnellement, je veux définir les génériques de Supplier \ <T > sur R) ~~
(1) BiFunction, (2) BinaryOperator, (3) IntBinaryOperator, (4) IntUnaryOperator, (5) ToDoubleBiFunction, quelles sont les méthodes correspondantes?
Premièrement, ① à ⑤ sont des types spécialisés de Fuction. Par conséquent, la partie méthode de base de «~ méthode correspondante = méthode de base + As + type de retour» est «appliquer».
①BiFunction
Si vous écrivez la définition jusqu'aux génériques, BiFunction <T, U, R> '' En termes simples, une version avec deux arguments supplémentaires pour Function \ <T, R \>. Puisque la valeur de retour n'est pas fixe, la méthode correspondante est `ʻapply
(cependant, il y a deux arguments)
②BinaryOperator
Si vous écrivez la définition jusqu'aux génériques, BinaryOperator <T> '' En termes simples, il s'agit d'une interface fonctionnelle lorsque les deux arguments de BiFunction et le type de retour sont tous les mêmes. Synonyme de BiFunction \ <T, T, T \>. Puisque la valeur de retour n'est pas fixe, la méthode correspondante est `ʻapply
(cependant, il y a deux arguments)
③IntBinaryOperator Une version de BinaryOperator dont les deux arguments et la valeur de retour sont de type int. Puisque la valeur de retour est déterminée par le type int, la méthode correspondante est `ʻapplyAsInt`` (deux arguments sont également de type int).
④IntUnaryOperator
Premièrement, «Opérateur unaire
⑤ToDoubleBiFunction
Si vous écrivez la définition jusqu'aux génériques, ToDoubleBiFunction <T, U> '' Puisqu'il est décidé que seule la valeur de retour est un type double, la méthode correspondante est `ʻapplyAsDouble
(cependant, il y a deux arguments)
J'ai écrit jusqu'à présent, mais quand je l'implémente, j'obtiens une erreur de compilation, donc je ne devrais pas avoir à penser à une chose aussi déroutante. J'espère que cet article vous a aidé à étudier les examens Gold et à comprendre le package java.util.function.
Remarque sur l'utilisation de l'interface de fonction ci-dessous java.util.function java.util.function (Java Platform SE 8 )
Recommended Posts