【发布时间】:2019-01-18 01:52:44
【问题描述】:
以下方法引用有什么区别,
BiPredicate<List<String>,String> contains1 = List<String>::contains;
BiPredicate<List<String>,String> contains2 = List::<String>contains;
BiPredicate<List<String>,String> contains3 = List<String>::<String>contains;
箱子有特殊名称吗?有没有类似用法的例子?
【问题讨论】:
-
相关:stackoverflow.com/questions/31245127/…。似乎第一个语法为
List指定了类型参数,而第二个语法为contains指定了类型参数(在这种情况下是不必要的,因为该方法不是通用的) -
当然还有
BiPredicate<List<String>,String> contains1 = List<String>::<String>contains;。 -
作为相关的旁注和部分解释:为非泛型方法提供类型参数是合法的,例如
list.<Number>contains("foo")。他们只是被忽略了。 (至于为什么 JLS 的作者选择允许它,我不知道。) -
@Radiodef 我不知道它的确切原因,但我怀疑你是 Herbert Schildt
-
@snr 为什么向非泛型方法提供类型参数是合法的?你可以找到答案here.
标签: java generics java-8 method-reference