Как интерфейсы будут заменены / дополнены замыканиями в Java? - PullRequest
11 голосов
/ 09 июля 2010

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

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

Кто-нибудь знает, как это будет работать / каковы планы?

Например, чтобы использовать 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");
                 });

Ответы [ 2 ]

8 голосов
/ 09 июля 2010

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

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

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

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

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

Возможно, вы также захотите взглянуть на этот документ Состояние лямбды , который является последним обновлением предложения и объясняет детали более подробно. Также обратите внимание, что специфика может быть изменена, хотя вполне вероятно, что лямбда-выражение / блок будет использоваться как тип SAM, как я описал.

0 голосов
/ 10 июля 2010

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

...