【问题标题】:java arraylist iteration having a ClassCastException具有 ClassCastException 的 java arraylist 迭代
【发布时间】:2013-01-17 12:39:34
【问题描述】:

我有模型课:

public class RecordSet {
    private DateRange daterange;
    private Master master;
    public DateRange getDaterange() {
        return daterange;
    }
    public void setDaterange(DateRange daterange) {
        this.daterange = daterange;
    }
    public Master getMaster() {
        return master;
    }
    public void setMaster(Master master) {
        this.master = master;
    }
}


public class DateRange {
    private Date ddate;

    public Date getDdate() {
        return ddate;
    }

    public void setDdate(Date ddate) {
        this.ddate = ddate;
    }

}

public class Master  {

    private String empcode;
    private String empname;
    private String dept;


    public String getEmpcode() {
        return empcode;
    }
    public void setEmpcode(String empcode) {
        this.empcode = empcode;
    }
    public String getEmpname() {
        return empname;
    }
    public void setEmpname(String empname) {
        this.empname = empname;
    }
    public String getDept() {
        return dept;
    }
    public void setDept(String dept) {
        this.dept = dept;
    }

}

我有这样的声明

List<RecordSet> list = (List<RecordSet>) query.list();

当上面的语句被执行时,我得到了列表 Objects 并且每个对象包含两个项目(Master,DateRange)?

任何人都可以如何获得这两个模型类对象

我已经尝试过,但遇到了 classcast 异常:

List<RecordSet> list = (List<RecordSet>) query.list();
            for(int i=0;i<list.size(); i++){
                Object set=list.get(i);
                Master masetr=(Master)set;

                System.out.println(masetr);
                }

谢谢

【问题讨论】:

  • 铸造不能那样工作;您不能神奇地将具有泛型类型的列表转换为不同的列表。

标签: java spring hibernate arraylist


【解决方案1】:
You can't cast them if they are not realted .

您要转换的对象的类和您要转换的类必须通过继承相关;也就是说,您只能将对象强制转换为其类的子类或超类的实例,而不能强制转换为任何随机类。

Side note: 在类层次结构中向下转换是自动的,但向上转换不是。

【讨论】:

  • 我使用了继承但仍然面临 ClassCastException,你能在这里提供我的源代码吗?你是如何 typeCasted 以及在调用 query.list() 方法后你是如何获得实体引用的?
  • DateRange 和 Master 扩展 RecordSet
  • 我的程序从主表返回员工详细信息,并从 DateRange 表返回一个日期库,就像您在此处的情况一样 stackoverflow.com/questions/14608667/…
  • 所以你可以使用 Master masetr=get(i);
  • 我正在添加这样的 query.addentity(Master);和 query.addentity(DateRange)
【解决方案2】:

试试这样:

List<Object> list = query.list();
for(Object obj:list){
   RecordSet rs = (RecordSet)obj;
   Master ms = rs.getMaster();
   System.out.println(ms.getEmpCode()); //all things you need to print
}

【讨论】:

    【解决方案3】:

    试试这样的:

    for (Object obj : query.getResultList()) {
        Object[] objArray = (Object[]) obj;
        Master ms = new Master();
        ms.setxxxx(objArray[0].toString());
        ms.setxxxx(objArray[1].toString());
        list.add(ms);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 2021-01-29
      • 2012-03-07
      • 2011-09-11
      相关资源
      最近更新 更多