学习 Java 8 - 函数式接口 Lambda
2016-06-08 08:16
645 查看
学习 Java 8 - 函数式接口
Java 8 引入了函数式接口的概念。函数式接口其实就是只包含一个抽象方法的普通 Java 接口。在没有引入函数式接口之前,我们通常使用内部类和匿名类来实现类似的功能。而在Java 8 中,我们可以用 lambda 表达式和函数式接口了。和内部类和匿名类比较起来,lambda 表达式的代码更加精简。java.util.function.Function就是一个 Java 8 引入的函数式接口。
如何定义函数式接口
函数式接口可以包含一个拥有任意个参数的方法,函数式接口需要用
@FunctionalInterface来注解。通过这个注解我们可以确保函数式接口只包含一个抽象方法。如果试图添加更多的抽象方法,则会报编译期错误
Unexpected @FunctionalInterface annotation。需要指出的是,函数式接口是还可以包含任意数量的缺省方法( default method )和静态方法的,而且函数式接口必须包含至少一个方法,而普通接口可以不包含接口。
没有任何参数的函数式接口
Display.java
1 package us.suselinks.learningjava8; 2 3 @FunctionalInterface 4 public interface Display { 5 6 void show(); 7 }
包含一个参数的函数式接口
Circle.java
1 package us.suselinks.learningjava8; 2 3 @FunctionalInterface 4 public interface Circle { 5 6 double area(double radius); 7 }
包含两个参数的函数式接口
Adder.java
1 package us.suselinks.learningjava8; 2 3 @FunctionalInterface 4 public interface Adder { 5 6 int add(int number1, int number2); 7 }
如何使用函数式接口
现在我们看看如何结合 lambda 表达式来使用函数式接口。下面的示例会实现上面定义的函数式接口。要运行下面的示例,我使用了 JDK8 和 Eclipse Luna 。
FunctionalInterfaceDemo.java
1 package FunctionalInterfaceDemo; 2 3 import us.suselinks.learningjava8.Adder; 4 import us.suselinks.learningjava8.Circle; 5 import us.suselinks.learningjava8.Display; 6 7 public class FunctionalInterfaceDemo { 8 9 public static void main(String[] args) { 10 // 没有任何参数的函数式接口 11 Display display = () -> System.out.println("showed up"); 12 display.show(); 13 14 // 包含一个参数的函数式接口 15 Circle circle = (num) -> Math.PI * num * num; 16 double res = circle.area(5.0); 17 System.out.println(res); 18 // 包含两个参数的函数式接口 19 Adder adder = (int a, int b) -> a + b; 20 int rs = adder.add(15, 20); 21 System.out.println(rs); 22 23 } 24 }
输出
showed up 78.53981633974483 35
相关文章推荐
- Java 8 Lambda
- JAVA使用继承还是组合
- Java设计模式(二) 工厂方法模式
- Java设计模式(三) 抽象工厂模式
- Java设计模式(五) 多态的极致应用——组合模式
- xml的SAX解析
- 使用Springmvc, Mybatis 重构 JPetStore
- java进行DOM解析
- Activiti入门教程之eclipse插件(一)
- "冒泡排序"算法-图文代码教你轻松简单理解-java编程
- java中List集合的比较
- Java WebSocket生命周期
- Mac下默认JDK路径
- andfix中的java hook流程
- 回调方法
- Algs4 BinarySearch.java
- struts 中继承ActionSupport类
- Java语言的基本程序设计结构
- Java instanceof 关键字用法示例
- BigDecimal类的加减乘除