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的