2
我想獲得java.util.function.Function的結果類型。 (如果返回類型已經是可選的,那麼我不必做任何事情,但除此之外,我必須將其包裝在可選項中,並且出於顯而易見的原因,我不想將其包裝兩次。代碼:從函數獲取泛型
public static void main(String[] args) {
printType(Integer::parse);
printType(new Foo());
printType(Functions::tryParseInt);
}
public static void printType(Function<String, ?> function) {
System.out.println(function.getClass());
System.out.println(function.getClass().getGenericInterfaces()[0]);
if (!returnsOptional(function)) function = function.then(Optional::ofNullable);
[...]
}
private static class Foo implements Function<String, Integer> {
@Override
public Integer apply(String t) {
return Integer.parse(t);
}
}
public static Optional<Integer> tryParseInt(String a) {
return Optional.empty();
}
我得到這個結果爲:
class my.util.Functions$$Lambda$1/1705736037
interface java.util.function.Function
class my.util.Functions$Foo
java.util.function.Function<java.lang.String, java.lang.Integer>
class my.util.Functions$$Lambda$3/764977973
interface java.util.function.Function
但實際上我想從方法獲得 java.lang.Integer中或java.util.Optional 對於第二個這個作品。使用get getGenericS uperClass()+ ParameterizedType,但不是其他兩個?我究竟做錯了什麼?
Java版本 「1.8.0_51」
什麼是'Integer.parse'?什麼是'功能:tryParseInt'? –
由於類型刪除,如果這通常是可行的,我會感到中度驚訝。 –