2012-12-07 15 views
15

私は将来のJava 8リリース、別名JDK 1.8でプレイしています。JavaのLambdasとgenerics 8

そして、私はあなたが簡単に

interface Foo { int method(); } 

を行うと、単に3

を印刷し、私はまた、Javaがあることを見出し

Foo foo =() -> 3; 
System.out.println("foo.method(); = " + foo.method()); 

と同じように使用できることが分かりました。これをより一般的な方法で行うutil.function.Functionインターフェース。しかし、このコードは

Function times3 = (Integer triple) -> 3 * triple; 
Integer twelve = times3.map(4); 

をコンパイルしませんそして私が最初IntIntFunctionステップを回避するための別の方法があるのであれば、私は思ったんだけど

interface IntIntFunction extends Function<Integer, Integer> {} 

IntIntFunction times3 = (Integer triple) -> 3 * triple; 
Integer twelve = times3.map(4); 

ような何かを持っているようですか?

+6

'Mapper times3'おそらく?もちろん、 –

+0

。ドー! –

+6

私はジェネリックスを理解し始めていたので、彼らはこれと一緒に来ます: - (... – SJuan76

答えて

5

@joopと@edwinありがとう。

最新リリースのJDK 8に基づいて、これを実行する必要があります。

IntFunction<Integer> times3 = (Integer triple) -> 3 * triple; 

そして、あなたはあなたがあなたがタイプや括弧を指定する必要はありませんが、あなたはキャストする必要があります

IntFunction times3 = triple -> 3 * (Integer) triple; 

のようなもので、それはもう少しスムーズに行うことができます好きではない場合あなたがそれにアクセスするときのパラメータ。

+0

待っているところでキャストは何ですか?オブジェクトになるには'トリプル 'をとるでしょうか?キャストすることをお勧めしますか? 'int'ではなく' Integer'に変更するのですか? – sehe

+0

(int)キャストはコンパイルされません。 –

+0

IntFunctionとは何ですか?と関数? – wensveen