尝试显示数据库数据时转换集合时出现问题

时间:2011-06-30 14:51:11

标签: java database loops casting

嘿伙计们我正在做一个数据库管理器项目,我无法显示从JTable上的数据库获得的所有数据。代码如下:

private Collection<Map<String, String>> allData;
private void refresh()
{
    while(tableModel.getRowCount() > 0)
    {
        tableModel.removeRow(0);
    }
    try
    {
allData = manager.get((String) DatabaseJList.getInstance().getSelectedObject()).getDataManager().getAllFieldsValues();
//This works fine, I have prove to print allData value and it is correct
Object[] rowToAdd = new Object[manager.get((String) DatabaseJList.getInstance().getSelectedObject()).getDataManager().getColumnNumber()];
//I create a Object[] with the number of colums size,works fine too
ArrayList<String> rowx = new ArrayList<String>();

for (Map<String, String> rowz: allData)
            {
                rowx = (ArrayList<String>) rowz.values();
                int i = 0;
                for (String str : rowx)
                {
                    rowToAdd[i] = str;
                }
            }
            tableModel.addRow(rowToAdd);
        }

我的想法是在开头使用方法refresh来加载所有表数据,并在插入,删除,修改后再次调用它以刷新数据但是我在这里得到这个错误:

java.uti.HashMap $无法将值强制转换为java.util.ArrayList

我知道方法.values()返回一个Collection,所以不知道这里的问题在哪里。

非常感谢帮助人员。

2 个答案:

答案 0 :(得分:1)

为什么rowx必须属于ArrayList<String>类型?你不能把它宣布为Collection<String>吗?

答案 1 :(得分:0)

  

java.util.HashMap $不能将值强制转换为java.util.ArrayList

     

我知道方法.values()返回一个Collection,所以不知道这里的问题在哪里。

问题在于你不能将超类强制转换为更具体的类。

该方法说它返回Collection。但是,您不知道该接口的真正内部实现是什么。 values()方法可能会返回VectorLinkedListArrayList或任何其他实现Collection的类。因此,Java只允许您将其强制转换为Collection(正如他在答案中已提到的artbristol)。