读取列表中的对象;不能演员

时间:2012-03-13 15:49:03

标签: java list casting

我认为我的代码中有一个简单的错误,但我找不到它。

我有一个对象列表(实体的类型),我想读取列表中对象的内容。

在我看来像:

object.get(1).getTitle();

List<HtMeldungen> meldungen = q.getResultList();

List<MeldungsBean> meldungsliste = new ArrayList();
MeldungsBean mb = null;
HtMeldungen tempMeldungen = null;

int i = 0;
int k = meldungen.size() - 1;

for (i = 0; i < k; i++) {
    mb = new MeldungsBean();
    tempMeldungen = (HtMeldungen) meldungen.get(i);

    mb.setTitel(tempMeldungen.getTitle());
    mb.setAutor(tempMeldungen.getAutor());
    mb.setMeldungstext(tempMeldungen.getText());

    meldungsliste.add(mb);
}

我的名为meldungen的列表中填充了HtMeldungen类型的对象。

我收到错误:

DBEntities.classic.HtMeldungen cannot be cast to DBEntities.classic.HtMeldungen

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

您确定q.getResultList()获取包含HtMeldungen个实例的列表吗? 如果没有,那么行

List<HtMeldungen> meldungen = q.getResultList();

是 - 取决于您的编译器开关 - 语法正确,但列表可以包含不同类的实例,稍后在行

tempMeldungen = (HtMeldungen) meldungen.get(i);

你得到了你的异常,因为编译器认为它必须是HtMeldungen的实例,实际上并非如此。 试试代码

if (meldungen.get(i) instanceof HtMeldungen) {
  tempMeldungen = (HtMeldungen) meldungen.get(i);
} else {
  throw new RuntimeException("Got instance of class " + meldungen.get(i).getClass());
}

如果您的假设出错,那么您会得到一个可以理解的错误。

答案 1 :(得分:0)

  

我会收到错误:DBEntities.classic.HtMeldungen无法转换为DBEntities.classic.HtMeldungen

由于错误消息表明HtMeldungen的对象无法转换为HtMeldungen(这似乎是矛盾的),我认为您可能在构建中将此类加载两次。请检查您的构建路径是否在构建中放置了相同的jar两次。这通常会导致此错误。