“无法创建通用数组…” – 如何创建Map 数组?
我想使用simpleJdbcInsert类和executeBatch方法
public int[] executeBatch(Map[] batch)
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/simple/SimpleJdbcInsert.html
所以我需要传递一个Map
数组作为参数。 如何创建这样的数组? 我试过的是
Map[] myArray = new HashMap[10]
它是错误的:无法创建Map
通用数组
List<Map>
会更容易,但我想我需要一个数组。 那么如何创建Map
数组呢? 谢谢
由于Java中的generics如何工作,您无法直接创建generics类型的数组(例如Map
)。 相反,您创建一个原始类型的数组( Map[]
)并将其转换为Map
。 这将导致不可避免(但可以抑制)的编译器警告。
这应该适合您的需要:
Map[] myArray = (Map[]) new Map[10];
您可能希望使用@SupressWarnings("unchecked")
注释此方法,以防止显示警告。
您可以创建通用的地图数组。
-
创建地图列表。
List
-
初始化数组。
Map
[] myDataArray = new HashMap[myData.size()]; -
从列表中填充数组中的数据。
myDataArray = myData.toArray(myDataArray);
我对此有一些困难,但我已经想出了一些我将尽可能简单分享的内容。
我对generics的经验仅限于集合,因此我在类定义中使用它们,例如:
public class CircularArray {
其中包含数据成员:
private E[] data;
但你不能制作类型generics的数组,所以它有方法:
@SuppressWarnings("unchecked") private E[] newArray(int size) { return (E[]) new Object[size]; //Create an array of Objects then cast it as E[] }
在构造函数中:
data = newArray(INITIAL_CAPACITY); //Done for reusability
这适用于genericsgenerics,但我需要一个可以排序的列表:可比较的列表。
public class SortedCircularArray> { //any E that implements Comparable or extends a Comparable class
其中包含数据成员:
private E[] data;
但我们的新类抛出java.lang.ClassCastException:
@SuppressWarnings("unchecked") private E[] newArray(int size) { //Old: return (E[]) new Object[size]; //Create an array of Objects then cast it as E[] return (E[]) new Comparable[size]; //A comparable is an object, but the converse may not be }
在构造函数中,一切都是一样的:
data = newArray(INITIAL_CAPACITY); //Done for reusability
我希望这会有所帮助,我希望如果我犯了错误,我们更有经验的用户会纠正我。
来自Oracle教程 [ 原文如此 ]:
您无法创建参数化类型的数组。 例如,以下代码无法编译:
List
[] arrayOfLists = new List [2]; // compile-time error 以下代码说明了将不同类型插入到数组中时会发生什么:
Object[] strings = new String[2]; strings[0] = "hi"; // OK strings[1] = 100; // An ArrayStoreException is thrown.
如果您使用通用列表尝试相同的操作,则会出现问题:
Object[] stringLists = new List
[]; // compiler error, but pretend it's allowed stringLists[0] = new ArrayList (); // OK stringLists[1] = new ArrayList (); // An ArrayStoreException should be thrown, // but the runtime can't detect it. 如果允许参数化列表数组,则前面的代码将无法抛出所需的ArrayStoreException。
对我来说,这听起来很微弱。 我认为任何对generics有足够理解的程序员都会非常好,甚至可以预期,在这种情况下不会抛出ArrayStoredException。
更重要的是,大多数程序员只会这样做:
List arrayOfLists = (List ) new List[2];
这将使他们与ArrayStoreException完全相同的风险不被抛出。
据我所知
首先尝试创建一个java.lang.Object数组,然后转换为Generic类型T.
例:
class Example{ public DataType array = (DataType[]) new Object[5] ; }
通过这种方式,您可以创建一个通用数据类型的数组