Java 8-通配符扩展,BiPredicate无法正常工作

时间:2018-11-22 10:30:55

标签: java generics java-8

我不知道为什么它不起作用。

日食中的错误消息: BiPredicate类型的方法test(Fruit,capture#1-of扩展了Fruit)不适用于参数(Fruit,Mango)

@ReactProp(name = SET_REPLAY, defaultBoolean = true)   
public void setReplay(final VideoPlayerView player, boolean replay) {
    Log.d(VideoPlayerViewManager.REACT_PACKAGE, "set replay: " + String.valueOf(replay));
    player.setRepeat(replay);
 } 

1 个答案:

答案 0 :(得分:3)

假设您将lambda表达式更改为:

    BiPredicate<Fruit, ? extends Fruit> tester = (Fruit f, Apple nf) -> {
        System.out.println(nf.name);
        return true;
    };

您是否仍希望编译器允许将Mango传递到此BiPredicate

基于BiPredicate<Fruit, ? extends Fruit>的编译时间类型-tester-,编译器不知道是否允许Mango,因此它不允许。

将您的BiPredicate更改为:

BiPredicate<Fruit, ? super Fruit> tester = (f, nf) -> {
    System.out.println(nf.name);
    return true;
};

将消除编译错误。