public void X(ArrayList list)
{
//reflection code will be here.
}
我们说list
变量是ArrayList<String>
的一种类型。如何使用java运行时反射获取String
(或传递的任何信息)?
答案 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.