简而言之,我的问题是如何将File.listFiles()返回的File对象转换为File的扩展类?我将返回的对象放入ArrayList中。我的第一个想法是将文件对象强制转换为我的类,图.class。
for(final File file : dir.listFiles()) {
fileArrayList.add((Figure) file)
}
抛出java.lang.ClassCastException。然后我想只在文件类中封装一个文件。这样做我为每个文件创建了一个新的Figure对象。这引发了许多与内存相关的错误。
如何使用File.listFiles()使我能够使用自己的File类扩展?
答案 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
,则转换将失败(如您所见)。 投射和转换之间的区别是一个很重要的理解。