你如何得到带有反射的List <type>?</type>

时间:2013-01-18 15:52:02

标签: java reflection

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

我该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:22)

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

请注意,元素类型不必是Class的实际String - 它可以是类型变量,通配类型等。

您可以阅读有关从反映的项herehere中抓取泛型信息的详情。

答案 1 :(得分:3)

这很简单:你做不到。在编译时,Java会删除泛型类型(请参阅Type erasure)。

您可以看到herehere,了解有关GetGenericType的更多信息(我真的不知道),但似乎相当有限。

答案 2 :(得分: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]