У меня есть метод, который возвращает 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?