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