【问题标题】:Convert ArrayList to List<GenericModel> gives ClassCastException将 ArrayList 转换为 List<GenericModel> 给出 ClassCastException
【发布时间】:2020-04-22 05:57:46
【问题描述】:

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

java类中结果集rs4的SP查询如下:

 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();

scanCommandList.toString() 给了我 5 个 ScanCommandName 对象。我必须将此 List 转换为 List 并按上述方式循环,但在 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 循环的第一行获得类播。

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

java.lang.ClassCastException: java.lang.String 无法转换为 com.GenericModel

高度赞赏任何建议。谢谢。

【问题讨论】:

  • 您的问题始于您创建原始ArrayLists.getCommandValue() 返回什么类型?它似乎是String。正如例外所说,您不能将String 转换为GenericModel

标签: java exception casting classcastexception


【解决方案1】:

这基本上就是你正在做的事情:

    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&lt;GenericModel&gt; = new ArrayList&lt;&gt;()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 2021-05-27
    相关资源
    最近更新 更多