java lambda 表达式的一个问题

直接贴代码(需要借助 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 来处理。


但是为什么第一个不会报错,而第二个会报错呢?


拉莫斯之舞
浏览 313回答 1
1回答

侃侃无极

你说对了啊,第一个是 effectively final,第二个不是啊
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java