Возврат из Comparable, возвращающий универсальный java.util.function.Function - PullRequest
1 голос
/ 07 марта 2019

У меня есть метод, который возвращает java.util.Function<A, T>, где T - универсальный тип. Мне нужно T, чтобы быть экземпляром Comparable<T>. Пытаясь вернуть ссылку на метод в getFunction() Я получаю сообщение об ошибке:

Error:(9, 16) java: incompatible types: bad return type in method reference
    java.lang.Integer cannot be converted to T

Вот MCVE:

import java.util.function.Function;

class Main {
    public static void main(String[] args) {
        System.out.println(getFunction(true).apply(new A(5)));
    }

    static <T extends Comparable<T>> Function<A, T> getFunction(boolean b) {
        if (b) return A::getX;
        else return A::getRandomString;
    }
}

class A {
    private Integer x;

    A(int x) {
        this.x = x;
    }

    Integer getX() {
        return x;
    }

    String getRandomString() {
        return "Hello Stack Overflow";
    }
}

Я пытался использовать тип возврата с подстановочным знаком Function<A, ?>, но тогда я не могу вызвать compareTo(). Есть ли способ вернуть Comparable из такого метода с типом safety?

...