使用具有功能接口的 Java 泛型类型时编译错误

我正在尝试使用具有泛型类型的 Java 函数式接口,但代码无法编译,我不知道为什么。这是代码的简化版本:


import java.util.ArrayList;

import java.util.List;

import java.util.function.Function;


public class TestClass <T extends Number> {


    Function<List<T>, Integer> fun;


    public  void testFun (List<T> x) {

        List<Number> ln = new ArrayList<>();

        fun.apply(ln);     // error: incompatible types: List<Number> cannot be converted to List<T>

        testApply(ln);     // This is similar to the code above, but compiles fine

    }


    public <M extends Number> Integer testApply(List<M> x) {

        return 0;

    }

}

错误在代码中指出。关于我做错了什么的任何指示?


慕标琳琳
浏览 124回答 1
1回答

一只斗牛犬

如果你实例化你的类,例如:TestClass<Integer>&nbsp;t&nbsp;=&nbsp;new&nbsp;TestClass<>();的类型fun是:Function<List<Integer>,&nbsp;Integer>并且您不能将 a 传递List<Number>给它的 apply 方法。你可以改变:List<Number>&nbsp;ln&nbsp;=&nbsp;new&nbsp;ArrayList<>();到:List<T>&nbsp;ln&nbsp;=&nbsp;new&nbsp;ArrayList<>();以消除错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java