Maison  >  Article  >  Java  >  Les expressions Lambda peuvent-elles être comparées pour l’égalité en Java ?

Les expressions Lambda peuvent-elles être comparées pour l’égalité en Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 04:16:01903parcourir

Can Lambda Expressions Be Compared for Equality in Java?

Les fonctions Lambda peuvent-elles être comparées ?

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 :

  • Les lambdas non sérialisables peuvent ne pas exposer tous leurs composants à des fins de comparaison.
  • Des fichiers compilés séparément pourraient convertir le même lambda en le même type d'interface fonctionnelle, rendant les comparaisons peu pratiques .

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn