在java中编写递归方法

u12*_*123 1 java recursion

我试图编写一个递归方法,搜索IData对象列表并返回一个特定的实现.该列表包含实现接口IData的对象.

该接口有两种实现方式:

1)DataImpl

2)DataContainerImpl

DataContainerImpl有一个:

 List<IData> children;
Run Code Online (Sandbox Code Playgroud)

所以它可以容纳嵌套的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;
  }
Run Code Online (Sandbox Code Playgroud)

Kal*_*Kal 5

不完全确定你在这里做了什么,但是在它前面没有"返回"的情况下递归调用"findContainerByName()"对你没有任何好处.

递归调用将返回,但随后调用将下降到底部并返回null.

例如,如果您的列表只包含1个DataContainerImpl,其名称与您调用方法的名称不匹配,但它在其中包含仅包含1个DataImpl的列表,您仍将返回null.这是你想要的吗?