如何投射对象数组?

时间:2011-10-27 15:10:52

标签: java java-ee arraylist

我是java新手并使用netbeans探索java ee应用程序。

我有代码:

userbean中的方法:

public List userList() {

  Query q = em.createNativeQuery("select username,address from tbuser");

  Iterator i = q.getResultList.iterator;

  ArrayList<UserState> userinfo = new ArrayList<UserState>();

  while (i.hasNext()) {

    Vector result = (Vector) i.next(); // <- HERE

    UserState us = new UserState();

    us.setName((String) result.get(0));

    us.setAddress((String) result.get(1));

    userinfo.add(us);

  }

  return userinfo;

}

我使用此方法构造jsf数据表并使用netbeans6.5和glassfish2

工作正常

然而,当我使用相同的方法,除了我将矢量更改为netbean 6.9

中的arraylist

和glassfish 3我得到了类演员

运行时的

异常:对象无法强制转换为java.util.list;

有人知道怎么做吗?谢谢..

2 个答案:

答案 0 :(得分:0)

我怀疑代码是这样的,hasNext()等方法缺少括号。如果您复制了代码,请再次这样做,因为让我们猜测您的代码不会提高答案的质量。

您的问题是您想要从Vector访问元素。但Vector中对象的类型不是Vector,而是不同类型的集合。你想要检索这个Vector的一个元素(这很好),但是你试着将它转换为Vector,它失败了。

由于我无法在运行时看到Vector中将包含哪种类型的对象,因此,您可以在发生当前错误的行之前使用System.out.println(i.next().getClass().getCanonicalName());。这将打印Vector元素的类型。

答案 1 :(得分:0)

嗯,更好的是直接在JPA查询中创建DTO:

public List userList() {

  Query q = em.createNativeQuery("SELECT new UserState(username,address) FROM tbuser");

  return q.getResultList();

}

像这样(这不是经过验证的代码)