获取变量的类型参数

时间:2014-11-28 10:17:57

标签: java generics reflection

public void X(ArrayList list)
{
  //reflection code will be here.
}

我们说list变量是ArrayList<String>的一种类型。如何使用java运行时反射获取String(或传递的任何信息)?

5 个答案:

答案 0 :(得分:2)

你无法在运行时获得它。在运行时它只是ArrayList<Object>

答案 1 :(得分:2)

您不能这样做,因为编译器会擦除泛型类型参数。在运行时,所有类型都是原始的。

您可以测试列表中单个元素的类型,但不能保证它们都属于同一类型。

答案 2 :(得分:2)

你不能。这是由于在编译期间发生的类型擦除。所有运行时看到的都是ArrayList<java.lang.Object>

在这方面,Java Generics是一个C ++模板的表兄弟。

答案 3 :(得分:1)

您不能 - 在运行时删除泛型类型信息。

答案 4 :(得分:1)

您无法在运行时直接获取它。间接地,您可以执行类似下面的操作来获取有关您存储的对象的类信息:

Class clazz = strList.get(0).getClass();

如果您将其定义为

List<String> strList = new ArrayList<String>();

并添加了第一个元素,如

strList.add("abc");

或者,如果您尝试在同一列表中存储不同类型的数据,则需要迭代每个元素并执行类型检查,如

if (strList.get(0) instanceOf String) {
    //blah blah
} else if (strList.get(0) instanceOf Integer) {
    //blah
}//etc etc.