我认为我的代码中有一个简单的错误,但我找不到它。
我有一个对象列表(实体的类型),我想读取列表中对象的内容。
在我看来像:
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
任何人都可以帮助我吗?
答案 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两次。这通常会导致此错误。