Question :
En Java, lors de l'utilisation d'expressions lambda, existe-t-il un moyen pour les comparer pour l'égalité ?
Réponse :
Du point de vue de la spécification :
La spécification du langage garantit uniquement que l'évaluation une expression lambda donnera lieu à une instance d'une classe qui implémente l'interface fonctionnelle cible. Cependant, il ne fournit aucune garantie quant à l'identité ou à l'alias de ces instances.
Du point de vue de la mise en œuvre :
Les implémentations Java actuelles établissent une relation 1:1 entre les instances synthétiques classes utilisées pour implémenter les lambdas et leurs sites de capture. Si le même lambda est évalué sur le même site de capture sans capturer aucune variable, la même instance est produite et peut être comparée en utilisant l'égalité de référence (==).
Pour les lambdas sérialisables, leur état peut être facilement récupéré, mais au prix d'une diminution des performances et de la sécurité.
Défis liés à l'égalité totale :
Il n'est généralement pas possible de déterminer si deux lambdas avec la même interface fonctionnelle et la même fonction de comportement sont égaux car :
Capacités et limitations actuelles :
Les références de méthode peuvent avoir des définitions d'égalité personnalisables à l'avenir pour permettre leur utilisation en tant qu'écouteurs.
Le groupe d'experts Java a envisagé d'exposer des informations pour des méthodes equals/hashCode et toString descriptives plus sélectives pour les lambdas. Cependant, ils ont décidé de ne pas le faire en raison de l'impact potentiel sur les performances de la majorité des utilisateurs.
En ce qui concerne toString, aucune conclusion définitive n'a été tirée, mais des arguments ont été avancés pour les deux parties, laissant la possibilité de réexaminer cette question. dans le futur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!