Java 泛型和方法引用错误

Java 泛型和方法引用错误,java,java-8,Java,Java 8,我使用的是Java8,由于客户端的需要,这是无法更改的 根据我最近提出的一个问题,我有一个新问题 我有一个函数如下所示: public <E, T, G extends ChangeThing> void dothing(String string1, String string2, F

我使用的是Java8,由于客户端的需要,这是无法更改的

根据我最近提出的一个问题,我有一个新问题

我有一个函数如下所示:

public <E, T, G extends ChangeThing> void dothing(String string1,
                                                  String string2,
                                                  Function<List<E>, Tuple2<List<T>,Integer>> convertThingy,
                                                  Function<Integer, List<G>> fetchChangesFunction,
                                                  Class<T> classType) {
它正在实施:

public interface ChangeThing {
并在以下方法中使用:

public List<Thingy> findAllThingyChanges(int version) {
在静态列表中的该项上显示以下错误:

incompatible types: bad return type in method reference
    List<Thingy> cannot be converted to List<G>
where G is a type-variable:
    G extends ChangeThing declared in class Test
不兼容类型:方法引用中的返回类型错误
无法将列表转换为列表
其中G是一个类型变量:
G扩展类测试中声明的changeting
我错过了什么


列表
不能转换为
列表
,这听起来很荒谬。因为
List
(这就是
G
应该成为的)是作为参数4传入的
DAO::findAllThingyChanges
方法的确切返回类型。因此,我必须遗漏一些东西。

为什么
Test
Test\u列表中是原始的?它后面应该有
,如果需要的话,还应该有类型参数。如果这个类有什么问题,这是前面问题的答案,我完全愿意接受修复/调整。主要目标是摆脱我在问题顶部列出的第一个函数调用,因为它被调用了40-60次,在4个地方,除了一些参数外,没有任何变化。我想摆脱复制/粘贴工作。为此,我想在一个地方收集所有相关的东西(我的第一次尝试是枚举,但它似乎与泛型有问题),并简单地在循环中调用该方法一次,使用适当的getter..我在列表声明行的
列表中添加了
,但它没有改变任何东西。它不会改变。添加具体类型。在
列表中
新测试中
都可以看到,除了编译器错误之外,什么都没有,因为需要各种语法/语法位。你能举个例子吗?为什么
Test
Test\u列表中是原始的?它后面应该有
,如果需要的话,还应该有类型参数。如果这个类有什么问题,这是前面问题的答案,我完全愿意接受修复/调整。主要目标是摆脱我在问题顶部列出的第一个函数调用,因为它被调用了40-60次,在4个地方,除了一些参数外,没有任何变化。我想摆脱复制/粘贴工作。为此,我想在一个地方收集所有相关的东西(我的第一次尝试是枚举,但它似乎与泛型有问题),并简单地在循环中调用该方法一次,使用适当的getter..我在列表声明行的
列表中添加了
,但它没有改变任何东西。它不会改变。添加具体类型。在
列表中
新测试中
都可以看到,除了编译器错误之外,什么都没有,因为需要各种语法/语法位。你能举个例子吗?
public final class Test<E, T, G extends ChangeThing> {

    private static final Dao DAO = new Dao();

    private static final List<Test> TEST_LIST = Arrays.asList(
            new Test("string1", "string2", ThingyConverter::convertThingy, DAO::findAllThingyChanges, Thingy.class)
    );

    private final String string1;
    private final String string2;
    private final Function<List<E>, Tuple2<List<T>, Integer>> converterFunction;
    private final Function<Integer, List<G>> fetchChangesFunction;
    private final Class<T> classType;

    private Test(String string1, String string2,
            Function<List<E>, Tuple2<List<T>, Integer>> converterFunction,
            Function<Integer, List<G>> fetchChangesFunction,
            Class<T> classType) {
        this.string1 = string1;
        this.string2 = string2;
        this.converterFunction = converterFunction;
        this.fetchChangesFunction = fetchChangesFunction;
        this.classType = classType;
    }
}
incompatible types: bad return type in method reference
    List<Thingy> cannot be converted to List<G>
where G is a type-variable:
    G extends ChangeThing declared in class Test