2012-01-18 16 views
5

私はhttp://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.htmlを読んでおり、すべての例が明示的に宣言された引数型を持っていることに気付きました。ただし、それはすでにinterface-function宣言から知られています。Java 8ラムダ構文で引数型を指定する必要がある理由はありますか?

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


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

は我々だけで

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

で行くことができませんUPDATEJSR-335 Draftでは、私が推測された型パラメータは

(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 
+1

例のほとんどは、マニフェストパラメータの型を使用したことを理由に省略されている例があります、 1日目から型推論が検討されたとしても、純粋に教育的です。聴衆はこれまでにこの資料を見たことのない普通のJava開発者とみなされました。 lambdas *と*型推論を一度に投げ込むことは、取り込むことが多いでしょう。 –

答えて

3

(SQLは、列名でないような)タイプは「4.ターゲットタイピング」セクション

Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2); 
0

をサポートされる可能性が最も高いことを見出しました私はそのタイプがどれくらい遅れているかによって決まると思います。

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

理論的には、変数宣言が親で指定されているか、暗示されている可能性があります。

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

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

または暗黙ゲッターであってもよいです。

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

または、パラメータが1つのみであるため暗黙的に名前空間にパラメータをインポートすると仮定できます。

FileFilter java = -> name.endsWith(".java"); 
関連する問題