为了账号安全,请及时绑定邮箱和手机立即绑定

java lambda 表达式的一个问题

java lambda 表达式的一个问题

拉莫斯之舞 2019-03-12 10:14:18
直接贴代码(需要借助 Guava 类库):String[] array = {"a", "b", "c"};for(Integer i : Lists.newArrayList(1, 2, 3)){  Stream.of(array).map(item ->     //Strings.padEnd 方法将 item 使用给定的 char 将字符串补全到长度 i    Strings.padEnd(item, i, '@')).forEach(System.out::println);}String[] array = {"a", "b", "c"};for(int i = 1; i < 4; i++){  Stream.of(array).map(item ->    //这里编译报错    Strings.padEnd(item, i, '@')).forEach(System.out::println);}查了一下,觉得可能是因为变量 i 被 lambda 表达式引用,所以编译器会隐式的将其当做 final 来处理。但是为什么第一个不会报错,而第二个会报错呢?
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

你说对了啊,第一个是 effectively final,第二个不是啊


查看完整回答
反对 回复 2019-04-17
  • 1 回答
  • 0 关注
  • 312 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信