【发布时间】:2015-05-15 05:06:53
【问题描述】:
当我想引用当前范围内的方法时,我仍然需要
在:: 之前指定类名(用于静态方法)或this
操作员。比如我需要写:
import java.util.stream.Stream;
public class StreamTest {
public static int trimmedLength(String s) {
return s.trim().length();
}
public static void main(String[] args) {
System.out.println(Stream.of(" aaa ", " bb ", " c ")
.mapToInt(StreamTest::trimmedLength).sum());
}
}
这对this 来说不是什么大问题,但有时静态方法看起来过于拥挤,因为类名可能很长。如果编译器允许我改为简单地写::trimmedLength,那就太好了:
public static void main(String[] args) {
System.out.println(Stream.of(" aaa ", " bb ", " c ")
.mapToInt(::trimmedLength).sum());
}
但是 Java-8 编译器不允许这样做。对我来说,如果以与普通方法调用相同的方式解析类/对象名称,这似乎是非常一致的。这也将支持方法引用的静态导入,这在某些情况下也很有用。
那么问题是为什么 Java 8 中没有实现这样或类似的语法?这种语法会出现什么问题吗?还是根本没有考虑过?
【问题讨论】:
-
您是否查看过 JCP 中有关此语法的讨论?我敢打赌,您可以找到很多关于这个和其他想法的信息。
-
不,我没有。如果您指出关于我的问题的确切消息/意见,那就太好了。
标签: java java-8 method-reference