我正在尝试编写一种递归方法,该方法搜索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。这是你想要的吗?

10-07 20:30