相关疑难解决方法(0)

Lambda表达式和方法重载疑问

好的,所以方法重载是一个糟糕的事情.既然已经解决了这个问题,我们假设我实际上想要重载这样的方法:

static void run(Consumer<Integer> consumer) {
    System.out.println("consumer");
}

static void run(Function<Integer, Integer> function) {
    System.out.println("function");
}
Run Code Online (Sandbox Code Playgroud)

在Java 7中,我可以使用非模糊的匿名类作为参数轻松地调用它们:

run(new Consumer<Integer>() {
    public void accept(Integer integer) {}
});

run(new Function<Integer, Integer>() {
    public Integer apply(Integer o) { return 1; }
});
Run Code Online (Sandbox Code Playgroud)

现在在Java 8中,我当然想用lambda表达式调用这些方法,我可以!

// Consumer
run((Integer i) -> {});

// Function
run((Integer i) -> 1);
Run Code Online (Sandbox Code Playgroud)

既然编译器应该能够推断出来Integer,为什么我不离开Integer呢?

// Consumer
run(i -> {});

// Function
run(i -> 1);
Run Code Online (Sandbox Code Playgroud)

但这不编译.编译器(javac,jdk1.8.0_05)不喜欢这样:

Test.java:63: error: reference to run is …
Run Code Online (Sandbox Code Playgroud)

java lambda overloading jls java-8

48
推荐指数
1
解决办法
8369
查看次数

标签 统计

java ×1

java-8 ×1

jls ×1

lambda ×1

overloading ×1