java返回类型错误和错误处理

时间:2018-10-29 03:38:09

标签: java error-handling return-type

我是新手。一种方法有两个错误。请帮助解决这些问题。

我正在使用多节点树制作文件系统。

此方法在子目录中返回给定名称的文件/目录。循环后,如果没有这样的文件/目录,则应该给出错误。

import java.util.ArrayList;
import java.util.Arrays;
import driver.exception.InvalidFileDirectoryException;

public class FileNode {

    private FileNode parent;
    private ArrayList<FileNode> children = new ArrayList<FileNode>();
    private String name;


    public FileNode getChild(String name) {   // This method must return a type of FileNode.
        for (int i = 0; i < children.size(); i++) {
                if (children.get(i).getName() == name) {
                    return children.get(i);
                }
                if ((i == children.size()-1) 
                    && (children.get(i).getName() != name)) {
                    throw new InvalidFileDirectoryException(
                        name + ": No such file or directory");   // Unhandled exception type InvalidFileDirectoryException
                }
        }
    }

我可以理解第一个错误。如果没有这样的文件或目录,此方法将不返回任何内容。但是,在这种情况下,我想给出一条错误消息。我该怎么办?请帮忙!

public class InvalidFileDirectoryException extends Exception {

    public InvalidFileDirectoryException() {
        super();
    }

    public InvalidFileDirectoryException(String message) {
        super(message);
    }
}

2 个答案:

答案 0 :(得分:1)

将您的getChild方法更改为:-

public FileNode getChild(String name) throws InvalidFileDirectoryException {
    for (int i = 0; i < children.size(); i++) {
        if (children.get(i).getName().equals(name)) {
            return children.get(i);
        }
    }
    throw new InvalidFileDirectoryException(name + ": No such file or directory");
}

这将扫描children集合。如果找到匹配项,则此方法将返回子级。如果循环完成,但未找到匹配项,它将引发异常。请注意,方法签名为throws InvalidFileDirectoryException

答案 1 :(得分:0)

方法中的所有潜在路径都需要返回一个值。您不能有一个返回值且不返回值的方法!

您只能从循环体内的两个if语句返回。如果if语句都没有真实条件怎么办?因此:在循环之后添加return语句。然后该方法可能应该返回null。如果确实是错误情况,则应该(无条件地)引发异常。

看起来您正在使用==比较字符串。错了,您应该改用 equals()