【发布时间】:2018-04-20 08:00:28
【问题描述】:
我对 Java 8 静态方法引用有一些误解。
以下说法正确:
Stream.of("aaa", "bbb", "cccc").map(String::length);
AFAIK map 需要 Function<T, R> interface 作为参数,其方法类似于:
R apply(T t);
但是,String 类的 length() 方法不接受任何参数:
public int length() {
return value.length;
}
1) 它与需要参数T t 的apply 方法有何关联?
2) 如果我写 String::someMethod 是否意味着 someMethod 应该是静态的(因为我是通过类名而不是对象引用来调用它)?
谢谢!
【问题讨论】:
-
要调用该方法的对象实例是您正在寻找的缺失参数。请注意您是如何映射到 String 实例流的。
-
在这种情况下,只需将方法引用替换为 lambda 表达式以便更好地理解。
标签: java java-8 java-stream