【发布时间】:2016-04-01 17:09:13
【问题描述】:
我刚开始研究 Java 8 Lambda 功能。我在 Java 7 中编写了这段代码,并尝试在 lamdas 中执行它。请注意,最后一行会产生编译错误,因为重载的函数不明确。我明白原因。如何使用 lambdas 解决这种歧义?
package com.java8.lambdas;
interface Bounceable{
void bounce(double howHigh);
}
interface Fly{
void flies(double howHigh);
}
abstract class Game{
void play(Bounceable b) {}
void play(Fly f) {}
}
class Ball extends Game{
void play(Bounceable b){ b.bounce(10); }
}
class Kite extends Game{
void play(Fly f){ f.flies(1000); }
}
public class LambdaDemo {
public static void main(String[] args) {
System.out.println("======= Java7: ========");
//Ball game
Game bg = new Ball();
bg.play(new Bounceable(){
@Override
public void bounce(double howHigh) {
System.out.println("Ball: Bouncing "+howHigh);
}
});
//Kite game
Game kg = new Kite();
kg.play(new Fly(){
@Override
public void flies(double howHigh) {
System.out.println("Kite: flies "+howHigh);
}
});
System.out.println("======= Java8 Lambdas: ========");
bg.play(x ->System.out.println("lambda: Ball bouncing "+ x)); //Ambiguous of type of Game
}
}
【问题讨论】:
-
看看这个question。那是您的问题的副本。我没有全部阅读,但最终看来,您尝试做的事情是不可能的。使用泛型是一种解决方法,但可能并不理想。
标签: lambda java-8 overloading