Java 获取变量的类型参数

Java 获取变量的类型参数,java,generics,reflection,Java,Generics,Reflection,假设列表变量是ArrayList的一种类型。如何使用java运行时反射获取字符串或任何传递的信息?您无法在运行时获取它。在运行时,它的just ArrayList不能这样做,因为编译器会删除泛型类型参数。在运行时,所有类型都是原始的 您可以改为测试列表中单个元素的类型,但不能保证它们都属于同一类型。您不能-泛型类型信息在运行时被擦除。您不能。这是由于编译期间发生的类型擦除。运行时只看到ArrayList 这方面,java泛型是C++模板的一个很差的表兄弟。在运行时不能直接得到它。间接地,您可以执

假设列表变量是ArrayList的一种类型。如何使用java运行时反射获取字符串或任何传递的信息?

您无法在运行时获取它。在运行时,它的just ArrayList不能这样做,因为编译器会删除泛型类型参数。在运行时,所有类型都是原始的


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

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

您不能。这是由于编译期间发生的类型擦除。运行时只看到ArrayList


这方面,java泛型是C++模板的一个很差的表兄弟。

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

public void X(ArrayList list)
{
  //reflection code will be here.
}
如果你这样定义的话

Class clazz = strList.get(0).getClass();
或者,如果您试图在同一个列表中存储不同类型的数据,则需要迭代每个元素,并执行如下类型检查

strList.add("abc");

我想是复制品。检查这个不,不是。在这种情况下,类型参数在编译时未知。谢谢,但列表可能为空,并且可能有太多类型作为类型参数传递。您至少需要一个元素来确定在列表中输入的元素类型。否则,我认为您将无法找出类型,因为类型信息在运行时被擦除。
strList.add("abc");
if (strList.get(0) instanceOf String) {
    //blah blah
} else if (strList.get(0) instanceOf Integer) {
    //blah
}//etc etc.