4

我在 Java 中有这个 ArrayList -

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

要将其转换为数组,我调用了list.toArray()方法,但它返回Object[]. 这不是我想要的。我想要Map<String, Object>[]

我知道List.toArray(T[] a); 它不适用于参数化类型。

Spring框架中batchUpdate方法的方法签名是这样的——

int[] org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(String sql, Map<String, ?>[] batchValues)

如果无法创建 Map 对象数组,为什么 Spring 使用它?那么我们应该如何使用这种方法呢?

4

6 回答 6

3

简而言之,您不能制作具体参数化类型的数组。是对正在发生的事情的一个很好的解释。Spring类型与说的基本相同Map batchValues。参数类型仅用于文档。Java 类型系统中的这个巨大漏洞是对性能的折衷。

于 2012-06-07T05:10:23.483 回答
2

试试这个,

 Map<String,Object>[] ar=list.toArray(new HashMap[list.size()]);
于 2012-06-07T04:56:46.677 回答
1

你可以这样尝试:

Map<String, Object> [] mp = list.toArray(new HashMap[list.size()]);
于 2012-06-07T04:54:33.163 回答
1

这样做:

Map<String, Object> [] mp = new HashMap[list.size()]; 
list.toArray(mp); 

这个答案有效。我测试了它。

我的完整测试代码如下:

import java.util.*;
public class Test {

    public static void main (String [] args) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("Hello", "World");
        ArrayList<Map<String, Object>> list = new ArrayList<Map <String, Object>>();
        list.add(map);

        Map<String, Object> [] mp = new HashMap[list.size()]; 
        list.toArray(mp);   
        System.out.println(mp[0]);    // prints out {Hello=World}
    }
}
于 2012-06-07T04:58:34.013 回答
0

HashMap[] map = list.toArray(new HashMap[0]);

于 2012-06-07T04:59:12.190 回答
-2

你不能这样做。

List.toArray(T[] a) 是您唯一的选择,但它不适用于参数化类型,因为它们不会在运行时保留。

于 2012-06-07T04:55:28.250 回答