1

私は次のコードを書きました:

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 だったので、3 番目にしようとしているように File にダウンキャストできないのはなぜですかループ内の行?次のエラーが表示されます:

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)

私のオプションは何ですか?

4

1 に答える 1

6

問題は、配列のキャストです。パラメータのないtoArrayは、実行時にリストの型情報が失われるため、オブジェクト配列を作成します。

変化する

File[] tempDir =  result.toArray();

File[] tempDir =  result.toArray(new File[result.size()]);
于 2011-03-12T13:26:17.343 に答える