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

将ArrayList转换为List给出ClassCastExctive

端木野
2023-03-14

我正在转换存储过程以完成JPA查询。下面是一个SP查询,我正在将其转换为实体类。我将其转换为一个定义为泛型模型的bean,它会导致classcastexception。

SP查询,其结果集rs4在java类中如下所示:

 rs4 Query: select command_value as descr from SCAN_COMMAND_NAME 
            where command_name = 'AAA' ORDER BY SEQ;   

在这里,结果集rs4被转换为GenericModel:

ResultSet rs4 = (ResultSet) cs.getObject(cnt++);
List commandRotateLi = new BeanProcessor().toBeanList(rs4,GenericModel.class);
session.setAttribute("coRotate", commandRotateLi);
///...
..///
ArrayList coRotate = (ArrayList) session.getAttribute("coRotate");
for(int x = 0; x < coRotate.size(); x++){
    gm = (GenericModel) coRotate.get(x);
    ///
}

上面的代码工作正常。下面是JPA转换的代码。

List<ScanCommandName> scanCommandList = new ArrayList<ScanCommandName>();
query = em.createNamedQuery("ScanCommandName.findByCommandName", ScanCommandName.class);
query.setParameter("commandName", Constants.IMAGE_MAGICK_ROTATE);
scanCommandList = query.getResultList();

ist.toString()给了我5个ScanORDName对象。我必须将这个列表转换为列表,并循环通过上面的一个,但在for循环中遇到类强制转换异常

ArrayList list =  new ArrayList();
List<GenericModel> coRotate = null;
for(int y=0; y<scanCommandList.size(); y++){
    ScanCommandName s = scanCommandList.get(y);
    list.add(s.getCommandValue());            
}
coRotate = (List<GenericModel>) (List) list;

我现在正在循环浏览列表coRotate,但在for循环的第一行获得classcast。

for(int x = 0; x < coRotate.size(); x++){
    gm = (GenericModel) coRotate.get(x);
    ///
}

JAVAClassCastException:java。无法将lang.String转换为com。通用模型

非常感谢您的建议。非常感谢。

共有1个答案

公孙志尚
2023-03-14

这就是你正在做的事情:

    ArrayList list = new ArrayList();
    List<SomeClass> slist;
    list.add("String"); // <-- I'm guessing here based on exception
    slist = (List<SomeClass>) list;

    for (SomeClass s : slist) { // class cast exception
        System.out.println(s);
    }


class SomeClass {

}

如果你这样做了:

    ArrayList<String> list = new ArrayList<>();

你不可能这么做的

    slist = (List<SomeClass>) list;

错误会在编译时被捕获。

在不知道类结构的细节的情况下,我怀疑要做您想要做的事情,coRotate需要保存GenericModel实例,并且您的ArrayList需要声明为ArrayList

 类似资料:
  • 此API调用返回一个可能较大的列表 排序、搜索和访问一个潜在的大型LinkedList将非常缓慢,对我的程序来说是不可接受的。因此,我需要将列表转换为ArrayList,以确保程序的实际效率。但是,由于列表很可能已经是ArrayList,因此不必要地创建列表的新ArrayList副本将效率低下。 考虑到这些约束,我提出了以下方法将列表转换为ArrayList: 我的问题是:这是处理具有未知实现的列

  • 问题内容: 将数组元素复制到其中的最佳方法是什么? 我需要快速执行此操作,所以最快的方法是什么? 问题答案: 利用创建 “(通过写‘到数组中。更改到返回的列表)’由指定数组支持的固定大小的列表。” 或者,解耦两个数据结构: 或更简洁:

  • 问题内容: 我是Java的初学者。我真的需要从数组或返回()。有可能的?我无法将数组插入(构造函数)。 代码如下: 问题答案: 添加以下代码以将arraylist值添加至应该可以工作:

  • 问题内容: 考虑到,我们怎么可以转换到(或)的 最佳和最快的 方式可能的,这样我们就可以用的就可以了,如操作,等等。 问题答案: 最好使用像Guava这样的库: 另一个番石榴的例子: 或Apache Commons Collections:

  • 问题内容: 我有一个包含> 100k对象的TreeSet。我有另一种方法需要ArrayList作为参数。 我有什么方法可以完成此任务而无需迭代整个TreeSet,然后将每个对象手动添加到ArrayList? 问题答案: 这个怎么样: 对于Java 7及更高版本,这可以简化,因为类型参数可以替换为菱形类型:

  • 问题内容: 我有arrayList 我想像这样转换为ArrayList到HashMap 请帮助我如何转换为HashMap。 问题答案: 一般的方法是遍历,然后将值插入。示例如下: