0
我正在处理我的FileSystem程序中的递归方法。文件系统采用通用树的形状。我在一般树中有两种类型的文件:Directory
和TextFile
。递归常规树方法ClassCastException
这里是我的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;
}
我有一个File
类Directory
和TextFile
继承。我的getChildren()
方法仅在Directory
中返回ArrayList<File>
类型。
我遇到的问题是一旦我做了几个目录和文本文件。如果我将currentDirectory
更改为更深的树findFile
将抛出ClassCastException
。
我已经想通了,为什么它这样做,我会在这里说明吧:
D1
/ \
D2 D4
/\ \
TF1 D3 D5
在这个插图D
代表一个Directory
,并TF
代表一个TextFile
。
在TF1
刚创建后,假设我想将我的工作目录更改为D4
。这将抛出ClassCastException
,因为findFile
是预先遍历的。
是否有反正我可以调整这种方法来识别TextFile
当它在下一行,并跳过它,以避免我的编程试图获得TextFile
的孩子?
谢谢!现在一切正常。 @cybersam – Aragorn300