java如何将JAXBG生成的集合中的all()项添加到简单的ArrayList?
我试图使用JAXB从一个大型XML文件中提取一些元素(从技术上讲,它是XTCE)
JAXB为我生成了一组对象。要获得所需元素的子集,我需要调用:
List<SequenceEntryType> org.omg.space.xtce.EntryListType.getParameterRefEntryOrParameterSegmentRefEntryOrContainerRefEntry();
我想加满一张支票
ArrayList<ParameterRefEntryType> integerParameters;
使用以下代码返回值:
integerParameters.addAll(...); // calling long JAXB-generated function above
参数refentrytype源于SequenceEntryType,所以只要我使用了合适的石膏,这应该是洁净的
然而,Eclipse报告:
“addAll方法(Collection<;?extensed ParameterRefEntryType>;)在类型中,ArrayList不适用于参数(ParameterRefEntryType)。"
我对Java泛型集合很生疏,我不完全理解这里发生了什么。似乎我需要重新定义ArrayList,以便只接受ParameterRefEntryType类型的项。我可以像这样使用addAll()吗,还是需要编写自己的循环来添加所需的元素
另一种选择似乎是:
List<SequenceEntryType> entries =
entryList.getParameterRefEntryOrParameterSegmentRefEntryOrContainerRefEntry();
Iterator<SequenceEntryType> entryIterator = entries.iterator();
while (entryIterator.hasNext()) {
SequenceEntryType currEntry = entryIterator.next();
if (currEntry instanceof ParameterRefEntryType) {
_integers.add(currEntry);
}
}
如果这个方法是必要的,我肯定会考虑使用lambdaj。
# 1 楼答案
你的循环可以写得短一点:
当然,如果你的方法名不是那么长,看起来会更好
smas已经说明了为什么它不能与
addAll
一起使用(原始列表可以包含非ParameterRefEntryType类型的元素)# 2 楼答案
关于JAXB,我不能给你一些提示,但这里有一点关于集合:
你有:
现在来看定义add和addAll:
在您的例子中,E是ParameterRefEntryType
所以积分参数。addAll()只能用于?扩展ParameterRefEntryType这意味着你只能在那里放置元素ParameterRefEntryType和childrens
add()也有类似的要求,所以如果你想添加这个对象,你可以手动添加,但你必须强制转换你的currEntry: