1.泛型去掉后,编译器不知道你输入输出的是什么类型,所以报错。BiConsumer 是输入 T 返回 R,不写出类型是编译器报错,运行时泛型是擦除掉的。
2. new ArrayList( ) 里面,ArrayList 实现了 add ( ) 方法,所以可以运行。
3.你困惑是因为 Lambda 的缩减.将
```BiConsumer<List<String>, String> v = List::add;```
替换为:
```
List<String> list = new ArrayList<>();
list.add("hello");
list.add("alex");
list.add("front");
BiConsumer<List<String>, String> v = new BiConsumer<List<String>, String>() {
@
Override public void accept(List<String> strings, String e) throws Exception {
strings.add(e);
}
};
```
这里还原成匿名内部类,能看懂了吗?
strings 传递来的是 list 的引用,e 传来的是 “ ddd"