代码如下
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add("alex");
list.add("front");
BiConsumer<List<String>, String> v = List::add;
System.out.println(v == null);
v.accept(list, "ddd");
System.out.println(list);
}
IDE 为 IDEA,不报错,正常运行。
我的疑问在于为什么下面这句话没有报错:
BiConsumer<List<String>, String> v = List::add;
List 是个接口,add 方法只有声明没有具体的实现,而且其前面明显和 BiConsumer 接口的 accept 不匹配。
另外如果我把泛型去掉,变成下面这样就报错了:
BiConsumer v = List::add;
这又是为什么?
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add("alex");
list.add("front");
BiConsumer<List<String>, String> v = List::add;
System.out.println(v == null);
v.accept(list, "ddd");
System.out.println(list);
}
IDE 为 IDEA,不报错,正常运行。
我的疑问在于为什么下面这句话没有报错:
BiConsumer<List<String>, String> v = List::add;
List 是个接口,add 方法只有声明没有具体的实现,而且其前面明显和 BiConsumer 接口的 accept 不匹配。
另外如果我把泛型去掉,变成下面这样就报错了:
BiConsumer v = List::add;
这又是为什么?