14

我有一个方法,并检查method.getParameterTypes()[0],这是一个java.util.List. 但我想弄清楚包含类型是什么,例如,如果它是java.util.List<String>我想弄清楚它应该包含字符串。

我该怎么做呢?

谢谢!

4

3 回答 3

25
Type listType = method.getGenericParameterTypes()[0];
if (listType instanceof ParameterizedType) {
    Type elementType = ((ParameterizedType) listType).getActualTypeArguments()[0];
}

请注意,元素类型不必是实际ClassString类型——它可以是类型变量、通配符类型等。

您可以在此处此处阅读有关从反射项目中抓取泛型信息的更多信息。

于 2013-01-18T16:43:11.210 回答
3

这很简单:你不能。在编译时,Java 会擦除泛型类型(请参阅类型擦除)。

你可以在这里这里查看更多信息GetGenericType(老实说,我不知道),但它似乎相当有限。

于 2013-01-18T15:54:19.067 回答
0

我有同样的问题,我做了如下

在这里:您的班级被初始化为 clazz(例如 - Company.Class),您的收藏为

List<Employees> companyEmployee

String collectionType- 列表

String collectionContent - 员工


Method[] methodList = clazz.getDeclaredMethods();
Method classMethod = methodList[0];

String[] collection= classMethod.getReturnType().toString().split("\\.");

String collectionType = collection[collection.length - 1]

String collectionContent = classMethod.getGenericReturnType().getTypeName().split("<")[1].split(">")[0]
于 2017-07-27T17:46:34.513 回答