5

http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.htmlを読みましたが、interface-function宣言からすでにわかっているにもかかわらず、すべての例で引数の型が明示的に宣言されていることに気付きました。 。

public interface FileFilter {
    /** ... **/
    boolean accept(File pathname);
}


FileFilter java = (File f) -> f.getName().endsWith(".java");

ただで行けない

(f) -> f.getName().endsWith(".java"); ?

更新JSR-335ドラフトで、推論されたタイプのパラメーターがサポートされる可能性が最も高いことがわかりました

(int x) -> x+1 // Single declared-type parameter
(int x) -> { return x+1; } // Single declared-type parameter
(x) -> x+1 // Single inferred-type parameter
x -> x+1 // Parens optional for single inferred-type case 
4

2 に答える 2

3

「4.ターゲットタイピング」セクションでタイプが省略されている例があります

Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);
于 2012-01-18T10:32:35.327 に答える
0

タイプをどれだけ遅く知っているかによると思います。

Java 7では、の右側のコードは=、式がどのように使用されるかを認識していません。これをコンパイルするには、コンパイラの設計変更が必要です。

理論的には、変数宣言は親で指定されているか、暗黙的に指定されている可能性があるため、必要ありません。

FileFilter java = (File f) -> f.getName().endsWith(".java");

になり得る

FileFilter java = -> pathname.getName().endsWith(".java");

または暗黙のゲッターを使用します。

FileFilter java = -> pathname.name.endsWith(".java");

または、パラメーターが1つしかないため、パラメーターが名前空間に暗黙的にインポートされると想定することもできます。(SQLが列名で行うように)

FileFilter java = -> name.endsWith(".java");
于 2012-01-18T09:17:58.830 に答える