Ошибка с обобщениями и ссылками на методы - PullRequest
1 голос
/ 08 ноября 2019

Я использую 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. Поэтому я должен что-то упустить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...