我正在尝试编写一个递归方法来搜索 IData 对象列表并返回一个特定的实现。该列表包含实现接口(interface) IData 的对象。
这个接口(interface)有两种实现方式:
1) 数据实现
2) 数据容器实现
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。这是你想要的吗?
关于java - 用java写一个递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5930505/