递归通用树方法ClassCastException

时间:2015-12-11 03:11:30

标签: java recursion

我正在使用FileSystem程序中的递归方法。 FileSystem采用通用树的形状。我在常规树中有两种类型的文件:DirectoryTextFile

这是我的findFile递归方法:

//Find any file by name
private File findFile(File f, String name){
    if(f.getName().equals(name))
        return f;
    File file = null;
    for(File c : ((Directory) f).getChildren()){
        file = findFile(c, name);
        if(file != null)
            break;
    }
    return file;
}

我有一个FileDirectoryTextFile继承。我的getChildren()方法仅在Directory中,并返回ArrayList<File>类型。

我遇到的问题是我制作了几个目录和文本文件。如果我将currentDirectory更改为树中更深层的内容findFile,则会抛出ClassCastException

我已经弄明白为什么会这样做,我会在这里说明一下:

       D1
     /   \
    D2     D4
   / \     \
 TF1   D3     D5

在此插图中,D代表DirectoryTF代表TextFile

创建TF1之后,假设我想将工作目录更改为D4。这将抛出ClassCastException,因为findFile是一个前序遍历。

无论如何,我可以调整此方法以识别TextFile下一行,并跳过它以避免我的编程试图获取TextFile的孩子?

1 个答案:

答案 0 :(得分:0)

这应该有效:

private File findFile(File f, String name){
    if(f.getName().equals(name))
        return f;
    File file = null;
    if (f.isDirectory()) {
        for(File c : ((Directory) f).getChildren()){
            file = findFile(c, name);
            if(file != null)
                break; 
        }
    }
    return file;
}