好吧,我已经达到了本世纪的思想头脑,坐了几个小时认真思考这个问题。我很快就会添加一个例子在这里:如何遍历包含与对象具有相同类型的子对象的对象?
public class AdUnitSizes {
protected String environmentType;
@XmlElement(name = "size")
protected List<Size> sizes;
protected List<Companions> companions;
现在基本上,如果我要构建这个作为一个XML文件,它会假设代表这样的事情(注意,同伴的类型为AdUnitSize [])
<adUnitSizes>
<size>
<width>800</width>
<height>600</height>
<isAspectRatio>true</isAspectRatio>
</size>
<environmentType>BROWSER</environmentType>
<companions> <!--adunitsize[]-->
<size>
<width>800</width>
<height>600</height>
<isAspectRatio>true</isAspectRatio>
</size>
<environmentType>BROWSER</environmentType>
<companions>
<size>
<width>800</width>
<height>600</height>
<isAspectRatio>true</isAspectRatio>
</size>
<environmentType>BROWSER</environmentType>
<companions>...</companions>
</companions>
</companions>
</adUnitSizes>
现在,我想指出,AdUnitSizes包含3个字段。大小,环境类型和随播广告。我现在正在尝试使用我创建的对象包装器(第一个示例)尝试在每个子Companions对象和他们的子Companions对象迭代之前迭代不会进一步发生(它在我们的系统中不太可能那同伴会超过3个层次深,但我需要照顾这个反正)
这是我曾尝试:
AdUnitSize[] adUnitSizeArray = adUnit.getAdUnitSizes();
if(adUnitSizeArray != null){
List<AdUnitSizes> adUnitSizesList = adUnitWrapper.getAdUnitSizes();
for(int i = 0; i < adUnitSizeArray.length; i++){
AdUnitSizes adUnitSizes = new AdUnitSizes();
aem.adservices.google.dfp6.om.Size size = new aem.adservices.google.dfp6.om.Size(); //Name clash with Google Size Class
size.setHeight(adUnitSizeArray[i].getSize().getHeight());
size.setWidth(adUnitSizeArray[i].getSize().getWidth());
size.setIsAspectRatio(adUnitSizeArray[i].getSize().getIsAspectRatio());
adUnitSizes.getSizes().add(size);
adUnitSizes.setEnvironmentType(adUnitSizeArray[i].getEnvironmentType().getValue());
List<Companions> companionsList = adUnitSizes.getCompanions();
//Need to iterate through all of adUnitSizeArray's Companions, and its companions children and so forth
}
}
任何想法?我接近这个错误吗?
你试过了吗?for(Companions companions:companionsList){...}' – SiB
这不是递归中的一个简单练习吗? –
看,这是问题,同伴,反过来,也包含同伴。 这样就无法工作。 'for(Companions companions:companionsList){//包含大小,环境类型,同伴(0或更多)}我如何迭代这些儿童同伴? – Eon