gpt4 book ai didi

java - 从函数中获取通用类型

转载 作者:行者123 更新时间:2023-11-30 10:53:25 25 4
gpt4 key购买 nike

<分区>

我想获得 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”

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com