Я вижу, Thread()
принимает Runnable
и String
для конструкторов с одним аргументом. Как компилятор узнает, что лямбда-класс реализует класс Runnable
, а не класс String
?
(new Thread( () -> {
System.out.println("Deleting stats...");
})).start();
Может быть, это зависит от количества методов в классе / интерфейсе? Но что если в классе есть несколько конструкторов, которые принимают класс с одним аргументом, который имеет только один метод, например:
Thread( Runnable r );
Thread( Comparable c );
Thread( ActionListener al );
Что происходит тогда, когда вы пытаетесь реализовать лямбду? Как бы компилятор узнал, какой класс реализует лямбда?