我正在尝试编写一种递归方法,该方法搜索IData对象列表并返回特定的实现。该列表包含实现接口IData的对象。
此接口有两种实现:
1)DataImpl
2)DataContainerImpl
DataContainerImpl具有:
List<IData> children;
因此它可以容纳嵌套的DataContainerImpl元素或仅包含普通的DataImpl元素。这是我的工作:
public static DataContainerImpl findDataContainerWithName(Collection<IData> elements, String name) {
for (IData element : elements) {
if (element instanceof DataContainerImpl) {
DataContainerImpl container = (DataContainerImpl) element;
if (container.getName().equals(name)) {
return container ;
}
container = findDataContainerWithName(container.getChildren(), name);
if (container != null) {
return container ;
}
}
}
return null;
}
最佳答案
不能完全确定您在这里做什么,但是递归调用“ findContainerByName()”会在前面没有“ return”的提示。
递归调用将返回,但随后该调用将降到底部并返回null。
例如,如果您的列表仅包含1个DataContainerImpl,其名称与您调用该方法所使用的名称不匹配,但是其中包含的列表又只有1个DataImpl,则您仍将返回null。这是你想要的吗?