gpt4 book ai didi

java - 使用 java 反射获取方法的类型化返回

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

如果我有这样的类(class):

class Test {
Thing<String> getThing(String thing) {}
}

如何使用 Test 实例上的反射来确定 String.class?我想要采取的路径是 new Test() -> 获取类 -> 查找方法 -> 获取返回类型 ->-> 以某种方式获取 String.class,但我没有找到最后一部分是如何完成的。到目前为止我所拥有的让我Thing<java.lang.String>但不是内部类。

import org.reflections.ReflectionUtils;

Iterables.getOnlyElement(ReflectionUtils.getAllMethods((new Test()).getClass())).getGenericType();

.getReturnType()只是给我一个 Thing.class ...

最佳答案

在 Java 中,您可以使用标准反射 API 获取它(无需使用 ReflectionUtils)。您正确使用了 getGenericReturnType。您只需将其转换为 ParameterizedType :

public static void main(String[] args) throws NoSuchMethodException {
Method m = Test.class.getDeclaredMethod("getThing", String.class);
Type type = m.getGenericReturnType();
// type is Thing<java.lang.String>
if(type instanceof ParameterizedType) {
Type[] innerTypes = ((ParameterizedType) type).getActualTypeArguments();
if(innerTypes.length == 1) {
Type innerType = innerTypes[0];
if(innerType instanceof Class) {
// innerType is java.lang.String class
System.out.println(((Class<?>) innerType).getName());
}
}
}
}

关于java - 使用 java 反射获取方法的类型化返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42264593/

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