Java8 est considérée comme la version la plus modifiée de l'histoire de Java. Il contient de nombreuses nouvelles fonctionnalités importantes, dont la principale est l'ajout d'expressions Lambda et de l'API Stream. Les deux peuvent également être utilisés ensemble. [Apprentissage recommandé : Tutoriel vidéo Java]
Regardons d'abord qu'est-ce qu'une expression Lambda.
Expression Lambda, l'explication sur Wikipédia est un opérateur utilisé pour représenter des fonctions anonymes et des fermetures. J'ai toujours l'impression que c'est très abstrait après avoir vu cette explication
public class SwingTest { public static void main(String[] args) { JFrame jFrame = new JFrame("My JFrame"); JButton jButton = new JButton("My JButton"); jButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Button Pressed!"); } }); jFrame.add(jButton); jFrame.pack(); jFrame.setVisible(true); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Si vous remplacez le code qui crée une instance d'interface à l'aide d'une classe interne anonyme dans le programme précédent par une expression Lambda, le code est le suivant
classe publique SwingTest {
public static void main(String[] args) { JFrame jFrame = new JFrame("My JFrame"); JButton jButton = new JButton("My JButton"); jButton.addActionListener(e -> System.out.println("Button Pressed!")); jFrame.add(jButton); jFrame.pack(); jFrame.setVisible(true); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
Focus sur la partie médiane Le changement de code peut être implémenté sur une seule ligne à partir des 6 lignes de code d'origine. Il s'agit d'une forme simple d'expression Lambda.
On peut voir que la syntaxe de l'expression Lambda est
(param1,param2,param3) -> {
//todo
Le programme de type des paramètres ici peut être déduit en fonction sur le contexte, mais ce n'est pas le cas. Tous les types ne peuvent pas être déduits. À ce stade, nous devons déclarer explicitement le type du paramètre. Lorsqu'il n'y a qu'un seul paramètre, les parenthèses peuvent être omises. Lorsque la section todo ne contient qu’une seule ligne de code, les accolades extérieures peuvent être omises. Comme notre exemple ci-dessus
En Java, les expressions Lambda sont des objets, et elles doivent être attachées à un type d'objet spécial - Functional Interface (Functional Interface) .
Regardons ensuite la définition de l'interface fonctionnelle : S'il y a une et une seule méthode abstraite dans une interface (les méthodes de la classe Object ne sont pas incluses), alors cette interface Elle peut être considérée comme une interface fonctionnelle.@FunctionalInterface public interface Runnable { /** * When an object implementing interface <code>Runnable</code> is used * to create a thread, starting the thread causes the object's * <code>run</code> method to be called in that separately executing * thread. * <p> * The general contract of the method <code>run</code> is that it may * take any action whatsoever. * * @see java.lang.Thread#run() */ public abstract void run(); }
@FunctionalInterface public interface MyInterface { void test(); String toString(); }
(Une mention supplémentaire ici est que dans Java 8, les méthodes de l'interface peuvent non seulement avoir des méthodes abstraites, mais peuvent également avoir des méthodes concrètes implémentées, qui sont appelées méthodes par défaut. Cette partie sera présentée en détail plus tard. )
Puisqu'en Java, les expressions Lambda sont des objets. Alors quel est le type de cet objet ? Revoyons à nouveau le programme SwingTest. Ici, une instance d'interface ActionListener est créée sous la forme d'une classe interne anonyme
jButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Button Pressed!"); } });
jButton.addActionListener(e -> System.out.println("Button Pressed!"));
public interface ActionListener extends EventListener { /** * Invoked when an action occurs. */ public void actionPerformed(ActionEvent e); }
Ainsi, en utilisant des expressions Lambda, vous pouvez créer des instances d'interfaces fonctionnelles. Autrement dit, l'expression Lambda renvoie un type d'interface fonctionnelle.
Résumé : Dans cet article, nous avons ouvert la porte à l'apprentissage de Java 8, appris ce que sont les expressions lambda, compris quelle est la définition des interfaces fonctionnelles et utilisé plusieurs exemples pour démontrer la commodité des expressions lambda.
Pour plus d'articles connexes, veuillez consulter : Introduction à l'apprentissage Java
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!