Как интерфейсы собираются быть замененными/увеличенными закрытиями в Java?

Java 7 будет иметь закрытия (наконец) и интересно, как существующий код с помощью классов/интерфейсов отдельного метода (как Выполнимый, Компаратор, и т.д.) будет использоваться теперь.

Это кодировало бы быть замененным? Будет какое-то преобразование? Дополнительный метод с помощью закрытия будет добавлен?

Кто-либо знает, как это собирается работать/каким, планы?

Например, для использования FileFilter сегодня мы делаем:

....
File [] files = directory.listFiles( new FileFilter() 
                      public boolean accept( File file ) {
                          return file.getName().endsWith(".java");
                       }
                   });

Кто-либо знает, как это собирается работать над Java7?

Возможно, перегружая метод File.listFiles для получения закрытия?

File [] files = directory.listFiles(#(File file){
                    return file.getName().endsWith(".java");
                 });
11
задан Feanor 3 May 2012 в 18:35
поделиться

2 ответа

Эти классы/интерфейсы называются типами SAM (Single Abstract Method), и преобразование лямбд в типы SAM является центральной частью предложения по проекту лямбд для JDK7. Фактически, последняя итерация предложения удаляет типы функций и только разрешает лямбды как экземпляры SAM-типов. Используя последнюю версию синтаксиса (которая не является окончательной), ваш пример можно было бы написать так:

File[] files = directory.listFiles(#(file){file.getName().endsWith(".java")});

С listFiles(FileFilter) без изменений по сравнению с тем, что есть сейчас.

Вы также можете написать

FileFilter javaFileFilter = {#(file){file.getName().endsWith(".java")};

Вы также можете взглянуть на этот State of the Lambda документ, который является последним обновлением предложения и объясняет все более подробно. Обратите внимание, что все детали могут быть изменены, хотя совершенно точно, что лямбда-выражение/блок будет использоваться как SAM-тип, как я описал.

8
ответ дан 3 December 2019 в 10:43
поделиться

Существующий код не изменяется и не требует замены.

0
ответ дан 3 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: