A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.什么是函数式接口,函数式接口和什么有关,和什么无关?
2.什么情况下可以使用lambda表达式来替换面向对象编码?
3.什么情况下lambda表达式可以简写?
4.方法引用分为哪几种形式?

15 个回复

倒序浏览
1.什么是函数式接口,函数式接口和什么有关,和什么无关?

答:函数式接口指的是有且仅含有一个抽象方法的接口,函数式接口和抽象方法有关,和接口的默认方法,私有方法,静态方法无关。

2.什么情况下可以使用lambda表达式来替换面向对象编码?

(1)使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法。
(2)必须有上下文环境,才能推导出Lambda对应的接口。对应的两种情况,根据局部变量的赋值得知Lambda对应的接口或者根据调用方法的参数得知Lambda对应的接口。

3.什么情况下lambda表达式可以简写?

(1)参数类型可以省略。但是有多个参数的情况下,要全部省略。
(2)如果参数有且仅有一个,那么小括号可以省略。
(3)如果代码块的语句只有一条,可以省略大括号和分号,有return关键字,必须将return省略掉。

4.方法引用分为哪几种形式?

引用类的方法(静态方法)
   类名::静态方法名
   例如:Interger::paseInt
   使用引用类的方法替代Lambda中的全部形参传递给静态方法
引用对象的方法(普通方法)
   对象::方法名称
   例如:System.out::println
   使用引用对象的方法去替代Lambda表达式的时候,将Lambda中的全部形参传递给普通方法
引用类的实例方法(成员方法)
   类名::方法名
   例如:String::substring
   使用类的实例方法替代Lambda表达式的时候,将Lambda中的第一个参数作为成员方法的调用者,其他参数作为方法的参数
引用构造器(构造方法)
   类名::new
   例如:Student::new
   使用引用构造器去替代Lambda表达式的时候,将Lambda中的所有参数作为构造器参数

点评

66666  发表于 2019-7-3 00:20
回复 使用道具 举报 1 0
1.什么是函数式接口,函数式接口和什么有关,和什么无关?

函数式接口是对匿名内部类的一种简写方式,
它只能用于只有一个抽象方法的接口 ,不能用于抽象类,普通类,和有多个抽象方法的接口

2.什么情况下可以使用lambda表达式来替换面向对象编码?

当有我们要用一个方法它的参数是一个接口,且该接口只有一个抽象方法,
我们可以用Lambda表达式替换匿名内部类的方式

3.什么情况下lambda表达式可以简写?

()里的参数类型可以省略,如果省略则全部都要省略
()如果参数只有一个,可以省略()
如果代码块只有一行,可以省略{}和; 如果省略了,还有return那么return也必须要省略掉

4.方法引用分为哪几种形式?
分为,类名::静态方法  对象::普通方法  类名::成员方法  类名::new
回复 使用道具 举报 1 0
本帖最后由 辛全旺 于 2019-7-2 19:21 编辑

1.什么是函数式接口,函数式接口和什么有关,和什么无关?
答:        有且只有一个抽象方法的接口。和抽象方法的个数有关,和私有方法,静态方法、默认方法无关。正确的函数式接口可以用@FunctionalInterface注释编译可以通过。

2.什么情况下可以使用lambda表达式来替换面向对象编码?
答:        当需要一个接口的实现类对象时,可以是赋值给变量、方法的形参、方法的返回值的情况,如果这个接口有且只有一个抽象方法,就可以使用lambda表达式。

3.什么情况下lambda表达式可以简写?
答:        1、参数列表可以省略数据类型,如果有多个参数,必须一起省略。
        2、如果参数只有一个,小括号可以省略。
        3、如果方法体语句只有一条,大括号和分号可以省略,此时如果有return,return必须省略。

4.方法引用分为哪几种形式?
答:        1、引用对象方法        对象::对象方法
        2、引用静态方法        类名::静态方法
        3、引用构造器        类名::new
        4、引用类的实例方法(对象也在参数列表中引用成员方法)        类名::成员方法
回复 使用道具 举报
1.只含有一个抽象方法的接口为函数式接口,和抽象方法个数有关,其他无关

2.调用的方法参数含有接口,接口中有且只有一个抽象方法

3.参数类型可以省略,多个参数不能只省略一个
当参数列表只有一个参数的时候“()”可以省略
当代码块只有一条语句的时候“{}”和“;”可以省略,若含有return,return也必须省略

4.
类静态方法引用 Math::max
对象方法引用  new Student()::study
构造器引用  Student::new
类成员方法引用 String::subString
回复 使用道具 举报 1 0
1.什么是函数式接口,函数式接口和什么有关,和什么无关?
答:函数式接口是表示一个接口下只有一个抽象方法的接口。
   只和抽象方法有关。
   与常量、默认方法、静态方法、私有方法无关。
2.什么情况下可以使用lambda表达式来替换面向对象编码?
答:(1)有一个接口
   (2)接口中有且仅有一个抽象方法
   (3)必须有上下文环境,才能推导出Lambda对应的接口
        - 根据局部变量的赋值得知Lambda对应的接口
        - 根据调用方法的参数得知Lambda对应的接口
3.什么情况下lambda表达式可以简写?
答:(1)参数类型可以省略。但是有多个参数的情况下,不能只省略一个
   (2)如果参数有且仅有一个,那么小括号可以省略
   (3)如果代码块的语句只有一条,可以省略大括号和分号,和return关键字
4.方法引用分为哪几种形式?
答:(1)引用类的静态方法
   (2)引用对象的实例方法
   (3)引用类的实例方法
   (4)引用构造方法
回复 使用道具 举报
1.什么是函数式接口,函数式接口和什么有关,和什么无关?

函数式接口就是一个接口中有且只有一个抽象方法
函数式接口和抽象方法有关,和其他方法无关


2.什么情况下可以使用lambda表达式来替换面向对象编码?


只能是接口类型,有且只有一个抽象方法的时候就可以使用lanbda表达式
而且必须有上下文环境

3.什么情况下lambda表达式可以简写?
形参的类型可以省略

在参数只有一个的情况下,可以省略小括号
代码块只有一行的情况下,可以省略{}和;若这行代码有return,我们省略{}和;也必须将return省略
       


4.方法引用分为哪几种形式?
4种形式


引用类的静态方法
引用对象的普通方法
引用类的成员方法
引用构造器

点评

可以,可以  发表于 2019-7-2 19:52
回复 使用道具 举报
1.什么是函数式接口,函数式接口和什么有关,和什么无关?
答:函数式接口就是只有一个抽象方法的接口称为函数式接口,和抽象方法个数有关,和方法名,接口名,其余方法无关。

2.什么情况下可以使用lambda表达式来替换面向对象编码?
答:存在接口,且接口为函数式接口的时候可以用lambda表达式。

3.什么情况下lambda表达式可以简写?
答:1.形式参数数据类型可以省略。2.当只有一个形式参数时可以省略小括号。3.当代码块只有一行的时候可以省略大括号和分号,如果该情况下有return,则return也必须省略。

4.方法引用分为哪几种形式?
答:四种形式:1.引用类的静态方法,类名::静态方法名。2.引用对象的方法,对象名::方法名。3.引用类的实例方法,类名::方法名。4.引用构造器,类名::new。
回复 使用道具 举报

1.什么是函数式接口,函数式接口和什么有关,和什么无关?
一个接口只有一个抽象方法就是函数式接口,和抽象方法有关,和默认方法无关静态方法私有方法无关。
2.什么情况下可以使用lambda表达式来替换面向对象编码?
有一个接口且只有一个抽象方法,还有有上下文环境。
3.什么情况下lambda表达式可以简写?
没有参数就用()表示。只有一个参数就不要()只有一个输出语句就不要{}和分号。有return也要省略。
4.方法引用分为哪几种形式?
静态方法 普通方法 类方法 引用构造器
回复 使用道具 举报
1.什么是函数式接口,函数式接口和什么有关,和什么无关?
答:函数式接口指的是有且仅含有一个抽象方法的接口,函数式接口和抽象方法有关,
和接口的默认方法,私有方法,静态方法无关。

2.什么情况下可以使用lambda表达式来替换面向对象编码?
答:1.只有一个抽象方法的接口(函数式接口),
       2.这个函数式接口需要有上下文实现关系。将这个接口作为局部变量的参数类型或者方法列表的参数类型。

3.什么情况下lambda表达式可以简写?
答:1.在表达式中的参数只有一个可以省略()
       2.在表达式()中具有一个以上的参数时,可以省略它们的参数类型,但是如果省略不能只省略一个,必须全部省略。
       3.在表达式中的方法体中只有一句代码时可以省略{},return,分号;且省略的内容要么一起省略,要么不省略。


4.方法引用分为哪几种形式?
答:1.引用类方法
       2.引用对象实例方法
       3.引用类的实例方法
       4.引用构造器方法
回复 使用道具 举报
1.什么是函数式接口,函数式接口和什么有关,和什么无关?

有且只有一个抽象方法,仅和接口抽象方法数量有关,与其他类型方法无关

2.什么情况下可以使用lambda表达式来替换面向对象编码?

-有函数式接口
-方法调用接口
-有上下文环境

3.什么情况下lambda表达式可以简写?

-数据类型可省略
-参数只有一个时,小括号可省略
-代码块语句只有一条时,大括号,分号和return可省略

4.方法引用分为哪几种形式?

-类方法引用
-对象的实例方法引用
-类的实例方法引用
-构造器引用
回复 使用道具 举报
1.什么是函数式接口,函数式接口和什么有关,和什么无关?
        只有一个抽象方法的接口就是函数式接口
        和抽象方法的个数有关,和常量 静态方法 默认方法 私有方法无关

2.什么情况下可以使用lambda表达式来替换面向对象编码?
        当面向对象编码是接口并且有且只有一个抽象方法时,可以使用lambda表达式来替换面向对象编码

3.什么情况下lambda表达式可以简写?
        形参的数据类型可以省略
        若形参只有一个的话,可以省略"()"
        若代码块只有一行的话,可以省略"{}"和";"
        若这行代码有return的话,我们将"{}"和";"省略的时候,也必须将return省略掉


4.方法引用分为哪几种形式?
        引用类的方法(静态方法)
        引用对象的方法(普通方法)
        引用类的实例方法(成员方法)
        引用构造器
回复 使用道具 举报
1.什么是函数式接口,函数式接口和什么有关,和什么无关?
        函数式接口:必须是接口且只有一个抽象方法
        函数式接口与抽象方法有关,和默认方法、静态方法、私有方法无关

2.什么情况下可以使用lambda表达式来替换面向对象编码?
        可推导时,必须有上下文环境

3.什么情况下lambda表达式可以简写?
        1、没有参数时小括号内就留空
        2、代码块的语句只有一条时,可以省略大括号和分号
        3、形参的类型可以省略
        4、有多个形参时,形参的类型如果要省略就全都省略
        5、参数有且仅有一个时,小括号可以省略

4.方法引用分为哪几种形式?
        1、引用类方法    格式: 类名 :: 静态方法
        2、引用对象的实例方法    格式: 对象 :: 成员方法
        3、引用类的实例方法    格式: 类名 :: 成员方法
        4、引用构造器    格式: 类名 :: new
回复 使用道具 举报
1.什么是函数式接口,函数式接口和什么有关,和什么无关?
函数式接口:必须是接口且只有一个抽象方法
和抽象方法有关,有且只能有一个抽象方法
和其他方法无关
2.什么情况下可以使用lambda表达式来替换面向对象编码?
使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法
必须有上下文环境,才能推导出Lambda对应的接口

3.什么情况下lambda表达式可以简写?
形参的类型可以省略
若形参只有一个的话,可以省略"()"
若代码块只有一行的话,可以省略"{}"和";"
若这行代码有return的话,我们将"{}"和";"省略的时候,也必须将return省略掉

4.方法引用分为哪几种形式?
- 引用类的方法(静态方法)
  - lambda写法 s -> Integer.parseInt(s)
  - 类名::静态方法名
  - 例如 : Integer::parseInt
  - 注意:使用引用类的方法去替代lambda表达式的时候,将lambda中的全部形参传递给静态方法
- 引用对象的方法(普通方法)
  - lambda写法 s -> System.out.println(s)
  - 对象::方法名称
  - 例如 : System.out::println
  - 注意:使用引用对象的方法去替代lambda表达式的时候,将lambda中的全部形参传递给我普通方法
- 引用类的实例方法(成员方法)
  - lambda写法  (s,x,y) -> s.subString(x,y)
  - 类名::方法名
  - 例如 : String::subString
  - 注意:使用类的实例方法去替代lambda表达式的时候,将lambda中的第一个参数作为成员方法的调用者,其他参数作为方法的参数
- 引用构造器
  - lambda写法 (name,age) -> new Student(name,age)
  - 类名::new
  - 例如 : Student::new
  - 注意:使用引用构造器去替代lambda表达式的时候,将lambda中的所有参数作为构造器的参数.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马