<分区>
我想获得 java.util.function.Function 的结果类型。 (如果返回类型已经是 Optional 那么我不需要做任何事情,否则我必须将它包装在 Optionals 中并且出于明显的原因我不想将它包装两次。
这是我的示例代码:
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。 对于第二个,这使用 getGenericSuperClass() + ParameterizedType 有效,但对其他两个无效?我做错了什么?
Java 版本“1.8.0_51”