Я использую Java 8, и из-за потребностей клиента это не может быть изменено.
Исходя из недавнего вопроса, который я задал, у меня возникла новая проблема.
У меня есть функцияэто выглядит так:
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) {
G
относится к этому классу:
public class Thingy implements ChangeThing {
, который реализует:
public interface ChangeThing {
И используется в следующихМетод:
public List<Thingy> findAllThingyChanges(int version) {
Вызов метода dothing
, описанного выше, с методом findAllThingyChanges
работает просто отлично.
Однако этот класс (как предложено в ответ )на мой предыдущий вопрос):
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
Чего мне не хватает?
Этозвучит нелепо, что List<Thingy>
не может быть преобразовано в List<Thingy>
. Поскольку List<Thingy>
(то есть то, чем G
должен стать) является точным типом возврата метода DAO::findAllThingyChanges
, передаваемого в качестве аргумента 4. Поэтому я должен что-то упустить.