试图在java中向下传播Object to File

时间:2011-03-12 13:23:40

标签: java arraylist downcast

我写了下一段代码:

private ArrayList<File> filter() {

    ArrayList<File> result = _filters.get(0).buildTree(_dir.listFiles());

    for (int i=1; i<_filters.size(); i++){
        File[] tempDir =  result.toArray();
        result = _filters.get(0).buildTree(tempDir);
    }

    return result;

}

正如你所看到我有一个FILE的ArrayList,然后我使用result.toArray返回和Object []数组,但它之前是File,所以为什么我不能将它转发回File,因为我正在尝试在循环的第3行? 我得到了下一个错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.io.File;
at oop.ex1.filescript.Command.filter(Command.java:50)
at oop.ex1.filescript.Command.run(Command.java:28)

我有什么选择?

1 个答案:

答案 0 :(得分:6)

问题是数组的强制转换。不带参数的toArray会创建一个对象数组,因为列表的类型信息会在运行时丢失。

更改

File[] tempDir =  result.toArray();

File[] tempDir =  result.toArray(new File[result.size()]);