java 获取泛型中存的数据
时间: 2023-08-16 14:03:39 浏览: 109
在 Java 中获取泛型中存储的数据可以使用反射机制,具体步骤如下:
1. 获取泛型类对象的 Class 对象,例如 List<String>,则获取的是 List.class;
2. 通过 Class 对象的 getDeclaredField 方法获取泛型类中存储数据的变量,例如 List 中的 elementData;
3. 通过变量的 get 方法获取泛型数据的实际类型,例如 List 中的 elementData 为 Object[],则获取的是 Object[] 类型;
4. 将获取到的 Object[] 类型转换为泛型类型,例如 List<String>,则将 Object[] 转换为 String[]。
示例代码如下:
```java
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
List<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
// 获取 List 对象的 Class 对象
Class<?> clazz = list.getClass();
// 获取 List 中存储数据的变量 elementData
Field field = clazz.getDeclaredField("elementData");
// 设置变量可访问
field.setAccessible(true);
// 获取变量的值,即 Object[] 数组
Object[] array = (Object[]) field.get(list);
// 将 Object[] 数组转换为 String[] 数组
String[] strings = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
strings[i] = (String) array[i];
}
// 输出结果
for (String s : strings) {
System.out.println(s);
}
}
}
```
阅读全文