java8简单入门--函数式接口 @FunctionalInterface

1、介绍

  看了几篇关于 java8 入门的例子,其中引入了许多令人期待已久的特性(虽然我没有过这样的体会),但不管你的代码是普通青年款还是文艺青年款,你都可以从被 java8 的重新组织的代码看到她的简洁之处,不得不让我对这些新入贵圈(java圈)的小鲜肉做一些记录,以便我能很好的利用他们。

  最大的一个特点莫非就是引入了“函数式”编程这一个概念(都是剽窃的别的语言来的),还有那么多新奇的词语,比如“语法糖”“闭包”“显式|隐式函数”等这里我就不再一个一个去体会了,这里属于初次接触,先理解会用为主,细节的深入待后期慢慢琢磨。

2、函数式接口 -- @Functionnalinterface

  在翠花正式上代码示例之前,我们现来对这个函数式接口有个认识:

  1. 接口必须只有一个抽象方法;
  2. 接口可以有其他的默认(default)或者静态(static)方法;
  3. 接口默认继承了 Object 类,所以接口中不能覆盖了 Object 中的方法;

说明:该注解不是必须的,如果一个接口满足“函数式接口”特性,那么不加这个注解也没有影响,加上该注解能够更好的让编译器检查,如果不符合规范将会报编译错误。

  比如在 jdk8 中就对Comparator、Callable、Runnable等接口加上了该注解,下面两段代码的效果是一样的:

  

 1 public static void runThreadByLambda() {
 2     Runnable runnable = () -> System.out.println("这个是用拉姆达实现的线程");
 3     new Thread(runnable).start();
 4 }
 5
 6 //---------------------------------------------------------------------------------
 7 public static void runThreadByInnerClass() {
 8     Runnable runnable = new Runnable() {
 9     @Override
10     public void run() {
11         System.out.println("这个是用内部类实现的线程");
12     }
13     };
14     new Thread(runnable).start();
15 }
时间: 2024-10-27 19:22:59

java8简单入门--函数式接口 @FunctionalInterface的相关文章

JDK1.8新特性(二): Lambda表达式 (参数列表) -> { } 和函数式接口@FunctionalInterface

Lambda表达式 二:简介 JDK的升级的目的有以下几个:增加新的功能.修复bug.性能优化.简化代码等几个方面,Lambda表达式就是属于简化代码,用于简化匿名实现类,提供一种更加简洁的写法.Lambda表达式在Swift语言中称之为代码块,Lambda表达式可以认为是一种特殊的接口,该接口必须只有一个抽象方法. 语法 (参数类型 参数名, 数参数类型 参数名2...) -> { // code }; 小括号()中的内容就是方法中的参数列表包括参数类型.参数名,其中参数类型是可以省略的,当参

Java8 新特性----函数式接口,以及和Lambda表达式的关系

这里来讲解一下Java8 新特性中的函数式接口, 以及和Lambda 表达式的关系.看到过很多不少介绍Java8特性的文章,都会介绍到函数式接口和lambda表达式,但是都是分别介绍,没有将两者的关系说明清楚,在这里,把自己的理解整理如下: 一.函数式接口: 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口(Single Abstract Method).定义了这种类型的接口,使得以其为参数的方法,可以在调用时,使用一个lambda表达式作为参数.从另一个方面说,一旦我

java8新特性——函数式接口,方法,构造器,数组引用

package functional; /* 定义:如果一个接口里面只声明了一个函数,就称为函数式接口 lambda表达式的本质:作为函数式接口的实例,必须依赖一类特别的对象类型——函数式接口 所以用匿名实现类表示的都可以用lambda表达式来写 Java.util.function 下也定义了Java8的函数式接口 函数式接口 内置抽象类 作用 1.Consumer<T>: void accept(T t) 消费型 2.Supplier<T>: T get() 返回一个对应的T对

Java8函数式接口/Lambda表达式/接口默认方法/接口静态方法/接口冲突方法重写/lambda表达式指定泛型类型等

一:函数式接口 1.函数式接口的概念就是此接口必须有且只能有一个抽象方法,可以通过@FunctionalInterface来显示规定(类似@Override),但是没有此注解的但是只有一个抽象方法的接口也是函数式接口:(接口也和类一样有包访问权限,但是内部的方法则默认是public) @FunctionalInterface public interface IFoo{ void print(); }  // 就是一个最简单的函数式接口,但是如果再有个如void print2()抽象方法则这个接

【Java系列教程】一起爪哇Java 8(一)——函数式接口

引言 目前由于系统已经全面切换为JDK8,所以有必要系统的了解一下Java8的一些新特性,以便后续在日常工作中可以使用一些高级特性来提高编程效率. 因为Java8引入了函数式接口,在java.util.function包含了几大类函数式接口声明.这里第一篇主要研究一下Function相关的接口. FunctionalInterface注解 Java8的新引入,包含函数式的设计,接口都有@FunctionalInterface的注解.就像这个注解的注释说明一样,它注解在接口层面,且注解的接口要有且

12函数式接口、方法引用

12.1  函数式接口 12.1.1 概念 1.函数式接口在Java中是指:有且仅有一个抽象方法的接口. 2.函数式接口,即适用于函数式编程场景的接口,而Java中的函数式编程体现就是Lambda,所有函数式接口就是可以适用于Lamnda使用的接口,只有确保接口中有且仅有一个抽象方法,java中的Lambda才能顺利地进行推导. 3.语法糖的定义:是指使用更加方便,但是原理不变的代码语法,例如在遍历集合时使用的for-each语法,其实底层的实现原理 仍然是迭代器,这就是语法糖,从应用层讲, j

函数式接口、方法引用

概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口. 函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口.只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导. 备注:“语法糖”是指使用更加方便,但是原理不变的代码语法.例如在遍历集合时使用的for-each语法,其实底层的实现原理仍然是迭代器,这便是“语法糖”.从应用层面来讲,Java中的Lambda可以被当做是匿名内部类

Java 中的函数式接口

概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口. 函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适用于Lambda使用的接口.只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导. 备注:“语法糖”是指使用更加方便,但是原理不变的代码语法.例如在遍历集合时使用的for-each语法,其实 底层的实现原理仍然是迭代器,这便是“语法糖”.从应用层面来讲,Java中的Lambda可以被当做是匿名内

Java之函数式接口

函数式接口 概述:接口中只有一个抽象方法 下面介绍的可能很抽象,理解不了,至少在我看来单独的这几个借口是没有用的,跟最下面说的 Stream流一起用才会有效果 函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适用于Lambda使用的接口.只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导. 备注:"语法糖"是指使用更加方便,但是原理不变的代码语法.例如在遍历集合时使用的for-each语法,其实