Следующий код (перенос / изменение вашего кода в классе):
public class Main {
public static void main(String[] args) {
String item = "Hello, World!"
Thread t = new Thread(() -> printItem(item));
t.start();
}
public static void printItem(Object item) {
System.out.println(item);
}
}
Функционально эквивалентно:
public class Main {
public static void main(String[] args) {
String item = "Hello, World!"
Thread t = new Thread(new Runnable() {
@Override
public void run() {
printItem(item);
}
});
t.start();
}
public static void printItem(Object item) {
System.out.println(item);
}
}
Обратите внимание, что в первом примере вы должны использовать лямбду (->
). Однако вы не сможете использовать ссылку на метод, поскольку метод printItem
не соответствует сигнатуре Runnable
. Это было бы незаконно:
Thread t = new Thread(Main::printItem);
По сути, ссылка на метод такая же, как:
new Runnable() {
@Override
public void run() {
printItem(); // wouldn't compile because the method has parameters
}
}
Выражение после ->
или код внутри блока -> {}
- это тот же код, который вы поместили бы внутри метода run()
.
Runnable singleExpression = () -> /* this is the code inside run()*/;
Runnable codeBlock = () -> {
// this is the code inside run()
};