当我想引用当前作用域中的方法时,我仍然需要指定类名(对于静态方法)或者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());
}
}
Run Code Online (Sandbox Code Playgroud)
这不是一个大问题this,但有时看起来过于拥挤静态方法,因为类名可能很长.如果编译器允许我简单地编写它会很好::trimmedLength:
public static void main(String[] args) {
System.out.println(Stream.of(" aaa ", " bb ", " c ")
.mapToInt(::trimmedLength).sum());
}
Run Code Online (Sandbox Code Playgroud)
但是Java-8编译器不允许这样做.对我来说,如果类/对象名称的解析方式与普通方法调用相同,那么它似乎会非常一致.这也将支持方法引用的静态导入,这在某些情况下也很有用.
所以问题是为什么在Java 8中没有实现这样或类似的语法?这种语法会出现什么问题吗?或者根本不考虑它?
我用kotlin 1.1.2-2
我想plus100(Int):Int从方法调用顶级函数Mul2.plus100(Int):Int.我尝试在下面的代码中执行此操作,但实际上Mul2.plus100本身也被调用.
class Mul2 {
fun plus100(v: Int): Int = plus100(2 * v)
}
fun plus100(v: Int): Int = v + 100
fun main(args: Array<String>) {
val v = Mul2()
println(v.plus100(10)) // expected: "120", actual: StackOverflowError
}
Run Code Online (Sandbox Code Playgroud)
反正有访问plus100从Mul2.plus100?