#java #lambda
#java #лямбда
Вопрос:
Я использовал docs.oracle.com как мой способ изучения Java, и когда я попытался скомпилировать этот приведенный ниже пример кода, я получил 8 ошибок. Я использую java 7 u51. Похоже, что компилятор не распознает синтаксис лямбда-выражений, которому меня учит oracle. Я действительно надеюсь, что эти руководства не устарели, потому что они первые, которые я нашел, которые все ясно объясняют.
import java.util.function.Consumer;
public class LambdaScopeTest {
public int x = 0;
class FirstLevel {
public int x = 1;
void methodInFirstLevel(int x) {
// The following statement causes the compiler to generate
// the error "local variables referenced from a lambda expression
// must be final or effectively final" in statement A:
//
// x = 99;
Consumer<Integer> myConsumer = (y) ->
{
System.out.println("x = " x); // Statement A
System.out.println("y = " y);
System.out.println("this.x = " this.x);
System.out.println("LambdaScopeTest.this.x = "
LambdaScopeTest.this.x);
};
myConsumer.accept(x);
}
}
public static void main(String... args) {
LambdaScopeTest st = new LambdaScopeTest();
LambdaScopeTest.FirstLevel fl = st.new FirstLevel();
fl.methodInFirstLevel(23);
}
}
И ошибки:
C:java>javac LambdaScopeTest.java
LambdaScopeTest.java:19: illegal start of expression
Consumer<Integer> myConsumer = (y) ->
^
LambdaScopeTest.java:20: illegal start of expression
{
^
LambdaScopeTest.java:28: <identifier> expected
myConsumer.accept(x);
^
LambdaScopeTest.java:28: <identifier> expected
myConsumer.accept(x);
^
LambdaScopeTest.java:33: class, interface, or enum expected
public static void main(String... args) {
^
LambdaScopeTest.java:35: class, interface, or enum expected
LambdaScopeTest.FirstLevel fl = st.new FirstLevel();
^
LambdaScopeTest.java:36: class, interface, or enum expected
fl.methodInFirstLevel(23);
^
LambdaScopeTest.java:37: class, interface, or enum expected
}
^
8 errors
Ответ №1:
Lambda — это Java 8. Посмотрите, что нового в Java 8 и @since
в java.util.function.Потребитель.