2017-11-20 8 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

예, 그래서 내 질문에 게시 진술가 잘못 됐어? 그게 내가 묻고있는거야. 그것은 내 이전 코멘트에서 언급했듯이 [javatpoint] (https://www.javatpoint.com/java-lambda-expressions)이기 때문에 –

+0

@ jack_07 내가 제공 한 링크에서 당신이 무엇을 의미하는지 이해하지 못합니다. .class 파일에 관해서 아무것도 말하지 않습니다. – Lino

+0

세번째 Para. Java 람다 식은 함수로 취급되므로 컴파일러는 .class 파일을 만들지 않습니다. –