지금 람다를 배우고, 나는 몇 가지 자습서를 본 적이 그것은 간단한 예를 내놓았다 :"AssignmentOperator 표현"오류가
(int x) -> x + 5;
하지만 내 컴파일러는이 오류를 보여주고있다 :
Syntax error, insert "AssignmentOperator Expression" to complete Expression
나는 뭔가를 잊어 버렸습니까?
지금 람다를 배우고, 나는 몇 가지 자습서를 본 적이 그것은 간단한 예를 내놓았다 :"AssignmentOperator 표현"오류가
(int x) -> x + 5;
하지만 내 컴파일러는이 오류를 보여주고있다 :
Syntax error, insert "AssignmentOperator Expression" to complete Expression
나는 뭔가를 잊어 버렸습니까?
람다 식은 항상 Functional Interafces (단일 추상 메서드 인터페이스라고도 함)의 참조 형식에 할당되어야합니다. 실제로, 그들은 단순한 익명 클래스 (단일 메소드 포함) 구현에 대한 지름길을 제공합니다.
간단히 말해서, 람다 표현식 = (함수 인터페이스의) 추상 메소드 구현.
는 예를 들어, 표현식은 아래의 기능 인터페이스에 할당 할 수 있습니다 :
public interface MyInterface {//define Functional Interafce (SAM)
public int someMethod(int a);
}
public class Test {
public static void main(String[] args) {
MyInterface myInterface = (int a) -> a +5;//assign the expression to SAM
int output = myInterface.someMethod(20)); //returns 25
}
}
문제는, 위에서 지적했듯이, 당신은 람다와 작업을 수행하지 않는됩니다. 이는 다음을 의미합니다.
"Hello";
.
람다는 문장으로 사용할 수없는 표현식입니다. JLS8 §15.27에서 :
It is a compile-time error if a lambda expression occurs in a program in someplace other than an assignment context (§5.2), an invocation context (§5.3), or a casting context (§5.5).
이 예를 생각해
// functional interface
interface Operator
{
int apply(int a, int b);
}
// method that expects instance of the interface
int calculate(int a, int b, Operator op)
{
return op.apply(a, b);
}
// lambda expression
Operator plus = (a, b) -> a + b;
// method call
calculate(40, 2, plus);
당신은 람다와 아무것도하지 않는, 그리고 자바의 구문은 분명 아무것도하지 않는 문을 제외하려고합니다. – user2357112
코드에서 기대하는 바는 무엇입니까? – Andreas