11

Java 7 にはクロージャー ( finally ) があり、単一のメソッド クラス/インターフェイス (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");
                 });
4

2 に答える 2

8

これらのクラス/インターフェースは 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 型として使用できることはほぼ確実です。

于 2010-07-09T18:41:27.120 に答える
0

既存のコードは影響を受けず、置き換える必要はありません。

于 2010-07-10T10:14:25.867 に答える