Comment les fermetures en Java permettre la conception d'API pour remplacer la conception du langage?

StackOverflow https://stackoverflow.com/questions/4764539

  •  16-10-2019
  •  | 
  •  

Question

Je peux voir certains des avantages des fermetures, telles que la façon dont ils peuvent avoir leur place dans la simplification des bibliothèques existantes et de faire une certaine conception de l'avenir plus facile et plus efficace.

Cependant, l'un des points clés mentionnés dans le projet de proposition (http://www.javac.info/consensus-closures-jsr.html) se trouve dans la section 2.5, le point e:

  

(La spécification améliorera la langue par)

     

e) permettant la conception de l'API futur pour remplacer la conception du langage pour l'extension de la plate-forme Java.

Je me bats pour voir comment cela est le cas, sûrement la conception du langage est juste que - la conception de la langue elle-même, et ne peut être remplacé par une API Java à moins que ouvre toutes sortes d'étranges API en utilisant des fermetures pour modifier la langue (que je doute fortement arriver.)

Quelqu'un peut-il faire la lumière sur ce sujet et peut-être donner un exemple de quelque chose qui a nécessité un changement de langue auparavant, mais, avec l'ajout de fermetures, n'a plus besoin d'un?

Était-ce utile?

La solution

conception de l'API et de fonctionnalités linguistiques sont certainement interchangeables à certains points. Il suffit de regarder quelque chose comme le mot clé synchronisé en Java. Il est un mot-clé, mais pourrait tout aussi bien être mis en œuvre comme une API si la langue était suffisamment non bavard. Les annotations sont un autre exemple. L'autre façon autour d'une annotation @Stateless qui fait toutes les méthodes dans une transaction de classe, aurait aussi pu être un mot-clé de la langue.

Closures, notamment, rendre facile à la main un « bloc de code » à une méthode qui pourrait alors faire quelque chose avec cela.

Un exemple brut, un pour chaque pourrait être faite:

for_each(myFooList, #(Foo foo) { 
   String something = foo.getBar() + foo.getKaz();
   System.out.println(something);
});

Peut-être pas 100% aussi propre comme ayant pour chaque boucle directement pris en charge par la syntaxe de la langue, mais il permet à chacun de facilement l'expérience avec des améliorations comme la langue.

Autres conseils

Pour toute personne qui n'a pas lu le projet de proposition, voici un peu plus en détail de plus loin dans le même document:

  

L'ajout de fermetures simplifie l'évolution de la plate-forme Java. De nombreux RFE linguistiques existantes dans la base de données de bogue public Sun peut reciblée que les demandes de l'API pour méthodes qui reçoivent des fermetures . De nombreux besoins futurs pour les formulaires de déclaration supplémentaires peuvent plutôt être remplies par l'ajout de méthodes bibliothèque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top