使用File.listFiles()和扩展文件类

时间:2017-06-23 15:33:05

标签: java file oop

简而言之,我的问题是如何将File.listFiles()返回的File对象转换为File的扩展类?我将返回的对象放入ArrayList中。我的第一个想法是将文件对象强制转换为我的类,图.class。

for(final File file : dir.listFiles()) {
    fileArrayList.add((Figure) file)
}

抛出java.lang.ClassCastException。然后我想只在文件类中封装一个文件。这样做我为每个文件创建了一个新的Figure对象。这引发了许多与内存相关的错误。

如何使用File.listFiles()使我能够使用自己的File类扩展?

1 个答案:

答案 0 :(得分:3)

您需要创建对象,不能将现有对象转换为其他类型的对象。因此,如果您的班级被称为Figure,则您需要:

fileArrayList.add(new Figure(file.getAbsolutePath());

或类似(因为File没有复制构造函数,但确实有constructor accepting a pathname)。

另外,9000提醒我,您可以Figure接受File,然后在致电getAbsolutePath时使用super(或类似):

public Figure(File file) {
    super(file.getAbsolutePath());
}

这取决于您希望Figure拥有的构造函数。

  

我的第一个想法是将文件对象强制转换为我的类,图.class。

请记住,强制转换只会更改对象的引用的类型,它不会更改对象 的内容。如果对象不是Figure,则转换将失败(如您所见)。 投射转换之间的区别是一个很重要的理解。