嘿伙计们我正在做一个数据库管理器项目,我无法显示从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,所以不知道这里的问题在哪里。
非常感谢帮助人员。
答案 0 :(得分:1)
为什么rowx
必须属于ArrayList<String>
类型?你不能把它宣布为Collection<String>
吗?
答案 1 :(得分:0)
java.util.HashMap $不能将值强制转换为java.util.ArrayList
我知道方法.values()返回一个Collection,所以不知道这里的问题在哪里。
问题在于你不能将超类强制转换为更具体的类。
该方法说它返回Collection
。但是,您不知道该接口的真正内部实现是什么。 values()
方法可能会返回Vector
或LinkedList
或ArrayList
或任何其他实现Collection
的类。因此,Java只允许您将其强制转换为Collection
(正如他在答案中已提到的artbristol)。