我的代码存在问题。编译器说不兼容的类型,java.lang.object [] []需要但找到了java.lang.object []。
任何人都知道为什么会这样?我发现了一些关于泛型的问题,这些问题在这里给出了问题,但没有解决我的问题。
Object sqlQuery[][] = null;
List<Object[]> sqlLista = new ArrayList<Object[]>();
while (resultSet.next()) {
sqlLista.add(new Object[] { false, resultSet.getString("MMITNO"), null, null, null, null, null } );
}
sqlQuery = sqlLista.toArray();
编辑:我已经编辑了上面的代码,因为我看到我的尺寸错误
答案 0 :(得分:3)
问题是您正在调用parameterless overload of toArray()
,它会返回Object[]
。您无法将Object[]
分配给Object[][]
变量。
现在在我看来,您可能实际想要sqlQuery
Object[][][]
而不是Object[][]
,这样您就可以获得一个二维结果集中的每个条目的数组。然后你会:
// Please use this form rather than putting the brackets after the name
// - it keeps all the type information together.
Object[][][] sqlQuery = null; // No point giving it a dummy value
List<Object[][]> list = new ArrayList<Object[][]>();
...
sqlQuery = list.toArray(new Object[0][][]);
然而,我强烈建议你不要沿着这条路走下去 - 在新类型中封装当前只有Object[][]
的“结果”概念,所以你要有:
Result[] sqlQuery = null;
List<Result> list = new ArrayList<Result>();
...
sqlQuery = list.toArray(new Result[0]);
即使Result
只包含Object[][]
,这也会更容易理解很多。
答案 1 :(得分:3)
sqlLista.toArray();
返回数组,其中每个元素= Object [] [],返回数组的类型不是Object [] []本身。
将您的代码更改为:
Object sqlQuery[][] = new Object[][] { };
List<Object[]> sqlLista = new ArrayList<Object[]>();
while (resultSet.next()) {
sqlLista.add(new Object[] { false, resultSet.getString("MMITNO"), null, null, null, null, null } );
}
sqlQuery = sqlLista.toArray();
答案 2 :(得分:0)
查看List.toArray()的声明。
它想要转换为Object(Object [])数组。
但是sqlQuery
被声明为Object(Object [] [])的数组的数组。
此处的操作取决于您希望使用代码实现的目标。您可能希望为行创建特定的类,并创建该类的实例列表,而不是Object [] []的数组。