函数不应该返回布尔值

时间:2012-12-16 14:27:29

标签: java return

在下面的代码中,我检查给定的URL是否以允许的文件类型结束(可能的类型:.jpg,.jpeg,.png& .gif)。类型列表保存在arraylist中,该arraylist保存来自UI的文本描述(例如“JPG Images”)。

我的目的是让函数遍历带有描述的列表,并使用相应的URL检查方法检查url。

我希望这段代码可以工作,因为我相信每个场景都已被考虑:如果它是JPG,PNG或GIF,则返回true,否则返回false。但它仍然存在错误:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
This method must return a result of type boolean

这显然意味着某处的回报出了问题。我在俯瞰什么?

private boolean isImageURL(ImageURL url) {
    for (String type : fileTypes) {
        if (type.equalsIgnoreCase("JPG Images")) {
            if (url.isJPG() || url.isJPEG()) {
                return true;
            }
        } else if (type.equalsIgnoreCase("PNG Images")) {
            if (url.isPNG()) {
                return true;
            }
        } else if (type.equalsIgnoreCase("GIF Images")) {
            if (url.isGIF()) {
                return true;
            }
        } else {
            return false;
        }
    }
}

3 个答案:

答案 0 :(得分:6)

未涵盖所有可能的执行路径。例如,如果类型是“JPG Images”,但url既不是JPG也不是JPEG,则该方法不会返回任何内容。

删除最后一个else子句,然后只返回方法末尾的false

答案 1 :(得分:4)

嗯,很简单,如果嵌入的“leaf”if语句之一为表达式返回false,则应用程序不会返回return语句。 for循环也可能无法执行。

要解决此问题,请将return false移至方法的末尾,您应该没事。

答案 2 :(得分:0)

以下是您的if之一:

    else if (type.equalsIgnoreCase("PNG Images")) {
        if (url.isPNG()) {
            return true;
        }
        //otherwise... return what? (error here, put return false here)
    }

你也可以摆脱最后的else并返回false。