java lambda 表达式的一个问题
迷茫
迷茫 2017-04-17 17:28:03
[Java讨论组]

直接贴代码(需要借助 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)
PHP中文网

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号