关于Lambda表达式的报错问题?

package Against;

import Object.LambdaQs;

interface Eatable
{
void taste();
}
interface Flyable
{
void fly(String weather);
}
interface Addable
{
int add(int a,int b);
}
public class LambdaQS {
//调用该方法需要Eatable对象
public void eat(Eatable e)
{
System.out.println(e);
e.taste();
}
//调用该方法需要Flyable对象
public void drive(Flyable f)
{
System.out.println("我正在驾驶:"+f);
f.fly("清空如洗的晴日");
}
//调用该方法需要Addable对象
public void test(Addable add)
{
System.out.println("5与3的和为"+add.add(5, 3));
}
public static void main(String[] args)
{
LambdaQs lq=new LambdaQs();
//Lambda表达式的代码块只有一条语句,可以省略花括号
lq.eat(()-> System.out.println("苹果的味道不错!"));
//lambda表达式的形参列表只有一个形参是,可以省略圆括号
lq.drive(weather->
{
System.out.println("今天天气是:"+weather);
System.out.println("直升机飞行平稳");
});
//代码块只有一条语句的时候,可以省略花括号,如果代码块中只有一条语句,几十该表达式需要返回值,也可以省略return关键字

    lq.test((a,b)->a+b);
}

}
Eclipse:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The type Eatable from the descriptor computed for the target context is not visible here.

The method drive(Flyable) in the type LambdaQs is not applicable for the arguments (( weather) -> {})
The type Flyable from the descriptor computed for the target context is not visible here.

The method test(Addable) in the type LambdaQs is not applicable for the arguments (( a, b) -> {})
The type Addable from the descriptor computed for the target context is not visible here.

at Against.LambdaQS.main(LambdaQS.java:39)
我用的JDK是支持Java8的

2个回答

你的代码并没有什么问题。已测,能正常运行。看看环境对不对吧

可以看下这篇文章,Java8新特性Lambda表达式http://58coding.com/article/detail/24656434620795220

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问