当前位置: 首页 > 知识库问答 >
问题:

foreach 循环运行时错误,从 List 强制转换为 Object[]

甘英光
2023-03-14

在尝试通过JPA从数据库中检索表并将其填充到Table SWT小部件(org.eclipse.swt.widgets.Table)中时,我在执行以下Java代码时遇到了强制转换错误:

EntityManager connection = DB.Connection().createEntityManager(); //the EntityManagerFactory
TypedQuery<Object[]> query = (TypedQuery<Object[]>) connection.createQuery("select t from Test t"); 
List<Object[]> tablelist = query.getResultList();
connection.close();

SWTtable.removeAll(); //clears all the elements in the table

for (Object[] row : tablelist) { //error on this line - java.lang.ClassCastException: {packagename}.Test cannot be cast to [Ljava.lang.Object;
    final TableItem item = new TableItem(SWTtable, SWT.None);
    item.setData(row[0]);
    item.setText(0, row[1].toString());
}

如上所述,(Object[]行:tablelist){的这一行<code>返回了<code>java.lang.ClassCastException:{packagename}的错误。无法将测试转换为[Ljava.lang.Object;

似乎有一个错误转换tablelistList

如果这是一种糟糕的方法,并且您有其他建议,请详细说明。

注意:SQL 查询“从测试 t 中选择 t”只是测试代码。我将使用 parmeter 来指定我稍后需要哪些记录,因此这里将有多个表。


共有3个答案

翁钧
2023-03-14

我解决了这样的错误:

"select t.id, t.first, t.second, t.last from Test t"

这一切都在SQL查询中。我必须定义属性,而不是像这样选择所有属性:

"select t from Test t"
蓬化
2023-03-14
匿名用户

看起来< code>tableList包含一个< code>Test对象列表,而不是一个对象数组列表。这就是为什么当你把它改成

for (Object row : tablelist)

代码有效。

试着改变

List<Object[]> tablelist = query.getResultList();

List<Test> tablelist = query.getResultList();

和改变

for (Object[] row : tablelist) {
    ...
}

for (Test row : tablelist) {
    ...
}

您必须更改< code>for-loop中的代码,以使用< code>Test对象,而不是< code>Object[]。不知道< code>Test对象包含什么,我很难告诉你如何完成。但是我认为< code>Test对象应该保存您试图从数组中检索的所有信息,因为这是您的信息返回的方式。

云隐水
2023-03-14

这将起作用,异常也会告诉您哪里出了问题。这里的测试是JPA类型,是您的类型转换第2行不正确。您的类型转换正在强制列表

javadoc 执行选择查询,并将查询结果作为类型化列表返回。

项。设置数据项。setText调用中的正确属性访问器

EntityManager connection = DB.Connection().createEntityManager(); //the EntityManagerFactory
TypedQuery<Test> query = (TypedQuery<Test>) connection.createQuery("select t from Test t"); 
List<Test> tablelist = query.getResultList();
connection.close();

SWTtable.removeAll(); //clears all the elements in the table

for (Test row : tablelist) { //error on this line - java.lang.ClassCastException {packagename}.Test cannot be cast to [Ljava.lang.Object;
    final TableItem item = new TableItem(SWTtable, SWT.None);
    item.setData(row.getSomeAttribute());
    item.setText(0, row.getSomeOtherAttribute());
}
 类似资料:
  • 将循环转换为时遇到问题。 方法返回 我尝试过,但需要等待将转换为并且我无法添加它。 我正在尝试下载大约15个报告异步,以等待所有的已经下载,然后将它们合并成一个PDF。 注意:我使用的是框架4.8.3

  • 我尝试将一个循环转换为一个循环在flutter中等待循环。我想要循环的元素是Firebase实时数据库中的快照。 我的函数如下所示: 我尝试了不同的方法,但是我没有让函数工作。 第一次尝试: 错误: 未处理的异常:键入'_InternalLinkedHashMap 第二次尝试: 错误: 未处理的异常:键入'_InternalLinkedHashMap 在所有的尝试中,我都得到了相同的错误。但是上述

  • 本文向大家介绍PHP将变量强制转换为foreach循环中的对象类型,包括了PHP将变量强制转换为foreach循环中的对象类型的使用技巧和注意事项,需要的朋友参考一下 这取决于正在使用的IDE。例如,Netbeans和IntelliJ可以在评论中启用@var的使用- 这样,在遇到提示“->”之后,IDE会知道“ $variable”是ClassName的类。 另外,可以使用指定返回类型为Class

  • 从Laravel的foreach循环获取错误消息: 我的foreach循环是: 我的控制器是:

  • 我试了所有的办法,但都不起作用。应用程序一次又一次崩溃。拜托,救命。 这是用于Java和XML的应用程序代码。错误为 我的mainactivity.java代码如下所示 activity_main.xml的代码是

  • 如下面的代码所示,我发现了一个关于下面一行的错误,因为转换不正确 请让我知道如何解决这个问题。 注: 代码: 公共类MainActivity扩展AppCompatActivity{ logcat: