即使在方法结束时使用return语句,也会丢失return语句错误

时间:2017-01-17 14:23:13

标签: java

我有这种方法来搜索文件并将它们存储到列表中并返回它。问题是我得到了一个"这个方法必须返回List"类型的结果。甚至我在它的末尾都有一个List类型的返回语句。

public List<String> cautaFisiere(String root) {
    List<String> list = new ArrayList<String>();
    File[] file = new File(root).listFiles();
    if (file == null) {
        return ;
    }
    for (File x : file) {
        if (x.getName().toLowerCase().contains(fileName.toLowerCase())) {
            System.out.println(x.getName() + " " + x.getPath());
        }
        String path = x.getPath();
        if (x.isDirectory()) {
            cautaFisiere(path);

        }

    }
    return list;
}

错误发生在我的代码的第5行

4 个答案:

答案 0 :(得分:2)

您可以通过返回null来解决此问题。

 if (file == null) {
    return null;
 }

编辑:我想你是对的。

if (file == null) {
   return list;
}

答案 1 :(得分:2)

public List<String> cautaFisiere(String root) {
  ...
  List<String> list = new ArrayList<String>();
  ...

    if (file == null) {
        return ;
    }
  ...
}

不合法,因为该方法应返回String of List。

所以你可以写:

if (file == null) {
    return null ;
}

if (file == null) {
    return list;
}

答案 2 :(得分:0)

您的退货声明目前不会返回任何内容。让它返回一个空列表

答案 3 :(得分:0)

这是一个更好的解决方案:

if (file == null) {
    return list;
}

如果您返回null,则来电者必须处理null作为特例。一个空列表(就是list在那个点上的那个)可以被处理(几乎)与非空列表相同。

正如@Ted Hopp建议的那样,抛出异常将是解决这个问题的另一种方法。这取决于您是否需要/需要将root目录为空的情况视为异常/错误......或者无关紧要的事情。

  • 如果您确实希望这是“特殊”,那么这是一个好主意。

  • 如果没有,抛出异常会对调用堆栈中的代码进行不必要的工作。