Java 22 priniesla novú syntax pre prípady, keď nie je vyslovene potrebné pomenovať premenné. Novinku formálne špecifikuje dokument JEP 456: Unnamed Variables & Patterns.
Syntax poznáme z Pythonu alebo z jazyka Go:
vals = [1, 2, 3, 4, 5, 6] a, b, c, _, _, _ = vals print(a, b, c) for _ in range(5): print('falcon')
Python umožňuje "zahodiť" hodnotu premennej pri dekonštrukcii alebo pri iterácii.
package main import "fmt" func main() { words := []string{"sky", "rock", "tool", "forest", "war"} for _, word := range words { fmt.Println(word) } }
Podobne syntax môžeme použiť, ak nepotrebujeme pri iterácii index v jazyku Go.
import java.util.List; sealed interface Item permits Book, Rock, Tool {} record Book() implements Item {} record Rock() implements Item {} record Tool() implements Item {} void main() { for (int _ : new int[]{1, 2, 3, 4, 5}) { System.out.println("falcon"); } var items = List.of(new Book(), new Rock(), new Rock(), new Tool()); for (var item : items) { switch (item) { case Book _ -> System.out.println("it is a book"); case Rock _ -> System.out.println("it is a rock"); case Tool _ -> System.out.println("it is a tool"); default -> System.out.println("unknown"); } } }
V Jave je možné použiť syntax pri iterácii alebo pri pattern matchingu.
package org.example; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class QuitButtonEx extends JFrame { public QuitButtonEx() { initUI(); } private void initUI() { var quitButton = new JButton("Quit"); // quitButton.addActionListener(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // System.exit(0); // } // }); quitButton.addActionListener(_ -> System.exit(0)); createLayout(quitButton); setTitle("Quit button"); setSize(300, 200); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); } private void createLayout(JComponent... arg) { var pane = getContentPane(); var gl = new GroupLayout(pane); pane.setLayout(gl); gl.setAutoCreateContainerGaps(true); gl.setHorizontalGroup(gl.createSequentialGroup() .addComponent(arg[0]) ); gl.setVerticalGroup(gl.createSequentialGroup() .addComponent(arg[0]) ); } public static void main(String[] args) { EventQueue.invokeLater(() -> { var ex = new QuitButtonEx(); ex.setVisible(true); }); } }
Veľmi šikovné je použitie nepomenovanej premennej napríklad pri event handlerch.
Syntax bola po prvý krát zahrnutá v Jave 21 v preview verzii, v Jave 22 bola finalizovaná.