2017-11-20 3 views
0
interface Sayable{ 
    public String say(); 
} 
public class LambdaExpressionExample3{ 
public static void main(String[] args) { 
    Sayable s=()->{ 
     return "I have nothing to say."; 
    }; 
    System.out.println(s.say()); 
} 
} 

私のマシンでこのサンプルを実行しましたが、Sayable.classファイルを作成しました。Javaラムダ式は関数として扱われるため、コンパイラは.classファイルを作成しません。これは間違っていますよね?

+0

コードを見てください。 :)詳細は、['@ FunctionalInterface'](https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html?is-external=true)を参照してください。 – alfasin

+0

それは私がSayable.classファイルを作成したことです。 –

+0

'Sayable.class'ファイルはインターフェイスの宣言のために作成されたもので、ラムダとは何の関係もありません – alfasin

答えて

1

Sayable.classがコードで定義されているため作成されました。ラムダを取り除くと、まだ作成されていることがわかります。

これはJavaの仕組みです。同じ.javaファイルで定義されているクラス、インタフェース、および列挙型(パッケージprivateまたはinnerは関係ありません)は、コンパイル後に独自の.classファイルを取得します。

+0

雅私の質問に投稿するステートメントは間違っているので?それは私が求めているものです。私の前のコメント –

+0

@ jack_07で述べたように、[javatpoint](https://www.javatpoint.com/java-lambda-expressions)上にあるので、あなたがそこに提供したリンク.classファイルに関する何も言わないものです。 – Lino

+0

Third Para。 Javaラムダ式は関数として扱われるため、コンパイラは.classファイルを作成しません。 –

関連する問題