use*_*412 3 lambda overloading java-8
我刚开始研究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
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用类似强制转换的语法指示正确的类型;
// bg.Play(Bounceable)
bg.play((Bounceable) x -> System.out.println("lambda: Ball bouncing "+ x));
// kg.Play(Fly)
kg.play((Fly) x -> System.out.println("lambda: Ball bouncing "+ x));
Run Code Online (Sandbox Code Playgroud)
您可以在此答案中找到有关其工作原理的更多信息.
| 归档时间: |
|
| 查看次数: |
495 次 |
| 最近记录: |