标签:表示 内部类 new 列表 演示 eof 分组 img 声明
原文: https://www.cnblogs.com/yw0219/p/7302597.html
函数式接口就是只显式声明一个抽象方法的接口。为保证方法数量不多不少,java8提供了一个专用注解@FunctionalInterface
,这样,当接口中声明的抽象方法多于或少于一个时就会报错。如下图所示:
Lambda表达式本质上是一个匿名方法。让我们来看下面这个例子:
public int add(int x, int y) {
return x + y;
}
转成Lambda表达式后是这个样子:
(int x, int y) -> x + y;
参数类型也可以省略,Java编译器会根据上下文推断出来:
(x, y) -> x + y; //返回两数之和
或者
(x, y) -> { return x + y; } //显式指明返回值
可见Lambda表达式有三部分组成:参数列表,箭头(->),以及一个表达式或语句块。
步骤:
@FunctionalInterface
public interface InterfaceWithNoParam {
void run();
}
public class TestJava8{
InterfaceWithNoParam param;
}
public class TestJava8{
//匿名内部类
InterfaceWithNoParam param1 = new InterfaceWithNoParam() {
@Override
public void run() {
System.out.println("通过匿名内部类实现run()");
}
};
//Lambda表达式
//空括号表示无参
InterfaceWithNoParam param = () -> System.out.println("通过Lambda表达式实现run()") ;
}
@Test
public void testIntfaceWithNoparam() {
this.param.run();
this.param1.run();
}
上述内容实现了无参无返回值的函数接口与实现,当然还有其他形式:
@FunctionalInterface
public interface InterfaceWithParams {
void run(String s);
}
InterfaceWithParams params = new InterfaceWithParams() {
@Override
public void run(String s) {
System.out.println("通过" + s + "实现run(String)");
}
};
InterfaceWithParams params1 = (String s) -> System.out.println("通过" + s + "实现run(String)");
this.params.run("匿名类");
this.params1.run("Lambda");
@FunctionalInterface
public interface InterfaceUnVoidWithNoParam {
String run();
}
InterfaceUnVoidWithNoParam interfaceUnVoidWithNoParam = new InterfaceUnVoidWithNoParam() {
@Override
public String run() {
return "Hello World!";
}
};
InterfaceUnVoidWithNoParam interfaceUnVoidWithNoParam1 = () -> "Hello Lambda!";
String s = this.interfaceUnVoidWithNoParam.run();
System.out.println("返回结果是:"+s);
String s0 = this.interfaceUnVoidWithNoParam1.run();
System.out.println("返回结果是:"+s0);
@FunctionalInterface
public interface InterfaceUnVoidWithParams {
String run(Integer integer);
}
InterfaceUnVoidWithParams interfaceWithParams = new InterfaceUnVoidWithParams() {
@Override
public String run(Integer integer) {
return String.valueOf(integer);
}
};
InterfaceUnVoidWithParams interfaceWithParams1 = (Integer integer) -> String.valueOf(integer);
String s1 = this.interfaceWithParams.run(1);
System.out.println("您输入的是:"+s1);
String s2 = this.interfaceWithParams1.run(2);
System.out.println("您输入的是:"+s2);
标签:表示 内部类 new 列表 演示 eof 分组 img 声明
原文地址:https://www.cnblogs.com/sunleejon/p/12512291.html