java – 导致此retainAll异常的原因是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 导致此retainAll异常的原因是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2024字,纯文字阅读大概需要3分钟。
内容图文
![java – 导致此retainAll异常的原因是什么?](/upload/InfoBanner/zyjiaocheng/783/1b547813f7674fdab3599b6fafcae630.jpg)
java.lang.UnsupportedOperationException: This operation is not supported on Query Results
at org.datanucleus.store.query.AbstractQueryResult.contains(AbstractQueryResult.java:250)
at java.util.AbstractCollection.retainAll(AbstractCollection.java:369)
at namespace.MyServlet.doGet(MyServlet.java:101)
我正在尝试从数据存储区查询中检索一个列表,并仅保留我从列表中检索到的列表中的结果.我的列表都按预期填充,但我似乎无法在其中任何一个上使用retainAll.
// List<Data> listOne = new ArrayList(query.execute(theQuery));
// DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
// List<Data> listTwo = new ArrayList(ds.get(keys).values());
// listOne.retainAll(listTwo);
编辑
好的,为了简化,因为这显然是多个问题,我已经停止使用低级API进行数据存储而不是仅仅通过循环逐个拉动.
List<MyClass> test = (List<MyClass>) query.execute();
List<MyClass> test2 = new ArrayList<MyClass>();
for (String key : favorites) {
test2.add(pm.getObjectById(MyClass.class, key));
}
log.info(test.toString());
test.retainAll(test2);
以上工作.它不会抛出异常.以下确实抛出异常.唯一的区别是log.info.我很难过.
List<MyClass> test = (List<MyClass>) query.execute();
List<MyClass> test2 = new ArrayList<MyClass>();
for (String key : favorites) {
test2.add(pm.getObjectById(MyClass.class, key));
}
test.retainAll(test2);
解决方法:
It will not let me do new ArrayList() on the query result since it returns an array of objects.
但是,您需要将它们放在一个新的ArrayList()中.返回的List实现显然不支持retainAll().这就是异常告诉你的.
“plain”ArrayList支持它.如果由于泛型类型的不同而无法通过ArrayList构造函数,那么您需要手动循环它并在添加之前转换每个项目.
List<Data> listTwo = new ArrayList<Data>();
for (Object object : ds.get(keys).values()) {
listTwo.add((Data) object);
}
listOne.retainAll(listTwo);
更新:根据您的更新,实体显然是懒惰加载/填充.大多数ORM(DataNucleus是一个)可能确实这样做.因为我不使用DataNucleus,所以我不能详细介绍如何以“漂亮”的方式解决这个问题.但至少您现在知道问题的根本原因,并且可以通过与上述相同的方式解决.也在循环中填写列表测试.
内容总结
以上是互联网集市为您收集整理的java – 导致此retainAll异常的原因是什么?全部内容,希望文章能够帮你解决java – 导致此retainAll异常的原因是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。