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á.