相关疑难解决方法(0)

获取组件类型的数组类

如果我有一个实例Class,有没有办法获得Class其数组类型的实例?我基本上要求的是等效于方法getArrayType的反转getComponentType()方法,例如:

array.getClass().getComponentType().getArrayType() == array.getClass()
Run Code Online (Sandbox Code Playgroud)

java arrays

42
推荐指数
3
解决办法
2万
查看次数

list.toArray(T [] a),如果"T"是"运行时类型"怎么办?

list.toArray(T[] a),如果T是"运行时类型"怎么办?

" List"接口在Java中,方法:T[] toArray(T[] a)
好的,这是一个很老的问题,通常我们这样使用它:

String[] array = list.toArray(new String[0]);
String[] array = list.toArray(new String[list.size()]);
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不知道编码时类型"T"是什么,类型"T"只能在运行时决定,这里是示例:

List list=...;  // no generic type declared on this List
Class<?> clazz=...; //yeah, this is the real type of the element of the list, I can sure about that
Run Code Online (Sandbox Code Playgroud)

现在我需要将列表转换为元素类型为clazz的数组,我该怎么办?

可能你想知道为什么我有这种需要:
我对Morphia进行了一些修改(这是一个java-mongoDB框架).我需要从mongoDB获取数据并将其设置为POJO的右侧字段.在某些情况下,字段类型是数组,所获取的数据是BasicDBList实体(它扩展了ArrayList),因此BasicDBList实体必须转换为类型与POJO字段兼容的数组.

我查看了ArrayList的源代码,然后用一些丑陋的代码实现了我的目标:

List list=...;
Class<?> clazz=...;
Object targetArray=Array.newInstance(clazz, list.size());
list.toArray((Object[])targetArray);
Run Code Online (Sandbox Code Playgroud)

请问有更好的方法吗?

java generics list toarray

5
推荐指数
2
解决办法
636
查看次数

标签 统计

java ×2

arrays ×1

generics ×1

list ×1

toarray ×1