首页 > 试题广场 >

下面哪些写法能在 java8 中编译执行()

[不定项选择题]

下面哪些写法能在 java8 中编译执行()

  • dir.listFiles((File f)->f.getName().endsWith(“.Java”));
  • dir.listFiles((File f)=>f.getName().endsWith(“.Java”));
  • dir.listFiles((_.getName().endsWith(“.Java”)));
  • dir.listFiles( f->f.getName().endsWith(“.Java”));
Lanbda表达式的主要作用就是代替匿名内部类的繁琐语法, 它由三部分组成:
(1) 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
(2) 箭头()。必须通过英文中画线和大于符号组成。
(3)代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,那么那条语句就不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一套省略了return的语句。Lambda表达式会自动返回这条语句的值。
由此可见,应该是A和D正确。
发表于 2017-08-02 08:24:35 回复(15)
亲测A和D,BC会报错。


编辑于 2017-03-24 17:57:17 回复(10)
所有答案listfiles()函数写法是错误的,应该是listFiles()。
A答案,如果"file f"为"File f"则是正确的。
D答案,是A答案参数类型可推导下的省略写法。
发表于 2017-02-14 23:43:56 回复(2)

用排除法做就行了,lambda表达式的格式为()→{},其中箭头是必不可少的。B选项中的箭头为=>,C选项中没箭头,故排除BC。

lamdda中,箭头左边表示的是参数,右边表示的是方法体。

若无参无返回值,左边为()

若只有一个参数,左边为(参数a),也可以直接将括号省略。

若有两个参数,左边为(参数a,参数b)

若方法体中只有一条语句,可省略大括号return

编辑于 2019-04-13 10:00:32 回复(0)
C明显括号都不匹配,我不知道正确在哪。A和D都是jdk8的lambda 表达式
public class TestJdk08 { public static void main(String args[]){
    File file =new File("/Users/hao/Downloads");  File[] ff=file.listFiles( (File f)->f.getName().endsWith(".caj"));  for (File ss: ff) {
        System.out.println(ss.getName());  }


}
} 

发表于 2017-01-05 11:26:37 回复(8)
没人讲讲这里实际替代的是哪个匿名内部类吗 没人说我来说好了 这里实际替代的是FileFilter
发表于 2018-09-02 19:52:38 回复(0)
再一次成功避开正确答案[抓狂][抓狂]!!
发表于 2017-09-05 09:55:52 回复(0)
呜呜呜,我乱蒙了BC,结果正确答案是AD,果然对得起我。
发表于 2021-07-27 15:36:05 回复(0)
这题错了。A,D都是对的,
这里lambda替换的是Filefilter的匿名内部类
参数为File,jvm可以推导出 参数类型,所以File f中 File可以省略
同样,单个参数,括号也可以省略
发表于 2019-02-27 21:16:09 回复(0)
我的编译器,好像D可以通过的JDK1.8
发表于 2017-02-25 12:15:51 回复(3)
C
发表于 2017-01-01 12:50:29 回复(0)
jdk8的Lambda表达式:(形参列表) –> {实现},①形参列表中,可省略形参类型,jdk会进行类型推断(与泛型一样);②当只有一个形参时,可省略括号;③当实现只有一个语句时,可省略花括号;AD的写法均满足,应该是重写了某个获取文件列表(文件名以.Java结尾)方法,返回值是一个list,该方法应该是打印出获取的文件列表
发表于 2022-04-23 21:06:28 回复(0)
Lanbda表达式的主要作用就是代替匿名内部类的繁琐语法, 它由三部分组成: (1) 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。 (2) 箭头(→)。必须通过英文中画线和大于符号组成。 (3)代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,那么那条语句就不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一套省略了return的语句。Lambda表达式会自动返回这条语句的值。 由此可见,应该是A和D正确。
发表于 2019-08-02 00:22:39 回复(0)
记住了它的格式就可以了
发表于 2018-09-25 21:19:53 回复(0)
Lanbda表达式本质是语法糖,编译器帮助你转换包装为常规语句,因此可以使用更少的代码来实现相同的功能。
Lanbda表达式的结构          形参列表    ---->   代码块
a 形参列表 当有两个参数时 ,第一个是形参类型,第二个是形参对象;如果只有一个形参,可以省略(),保留形参对象
b ---->(箭头)标准写法 ->(MD编译器的原因,看着别扭)
c 代码块 正常的代码块,只包含一条语句
发表于 2018-09-10 09:49:24 回复(1)
我想知道C为什么错,有哪位大神能给详细解释下吗
发表于 2018-08-30 16:13:16 回复(2)
成功避开了正确答案,关键我还知道是考Lambda表达式
发表于 2017-11-01 07:14:27 回复(0)
成功避开正确答案
发表于 2017-09-07 08:48:26 回复(0)
答案错了,C选项不能编译通过。。。
编辑于 2017-01-05 19:52:20 回复(2)
dir.listFiles((_.getName().endsWith(“.Java”)));
严格意义上来说并不错,java8中_可以作为变量,这条语句并没有约定是库自带的还是用户自己构造的类,所以用户可以自定义变量dir和_的实现,使得这条语句能够通过编译。
发表于 2023-03-30 09:33:09 回复(0)