14

Java 8でこのようなことを行うにはどうすればよいですか?

boolean x = ((boolean p)->{return p;}).apply(true);

現在、次のエラーが表示されます。

この式の対象の型は関数型インターフェイスでなければなりません

4

1 に答える 1

25

JLSセクション15.27に従って:

代入コンテキスト (§5.2)、呼び出しコンテキスト (§5.3)、またはキャスト コンテキスト (§5.5) 以外の場所でプログラム内にラムダ式が発生すると、コンパイル時エラーになります。

returnステートメントでラムダ式を使用することもできます。

次に、4 つの異なる方法で例を書き直すことができます。

  • 割り当てコンテキストを作成することにより:

    Function<Boolean, Boolean> function = p -> p;
    boolean x = function.apply(true);
    
  • 呼び出しコンテキストを作成することにより:

    foobar(p -> p);
    
    private static void foobar(Function<Boolean, Boolean> function) {
        boolean x = function.apply(true);
    }
    
  • キャストコンテキストを作成することにより:

    boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
    
  • returnステートメントの使用:

    boolean x = function().apply(true);
    
    private static Function<Boolean, Boolean> function() {
        return p -> p;
    }
    

また、この単純な例では、ラムダ式全体を次のように書き換えることができます。

UnaryOperator<Boolean> function = UnaryOperator.identity();
于 2015-09-03T19:31:40.307 に答える