2012-03-13 34 views
0

我想我的代码有一个简单的错误,但我找不到它。在列表中读取对象;不能被铸造

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

在我看来是这样的:

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

你在这个列表中有什么样的对象?他们是HtMeldungen还是它的一些扩展?顺便说一句,你应该使用迭代器遍历列表。 – Adrian 2012-03-13 15:54:08

+0

HtMeldungen是MeldungsBean的子类吗? – user1242756 2012-03-13 15:54:16

+1

它是运行时异常还是编译时? – jabal 2012-03-13 15:56:34

回答

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

那么你得到一个可以理解的错误,如果你的假设应该是错的。

0

I'll get the error: DBEntities.classic.HtMeldungen cannot be cast to DBEntities.classic.HtMeldungen

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