12

私は Java NIO.2 とそのファイル操作についていくつかの調査を行っており、現在はファイル ツリー ウォーキング関数とクラスで遊んでいます。

NIO.2 FileVisitorAPI は素晴らしいです。10 年前ではなく、最近になって Java SE に追加されたのは残念です。ただし、少し気になることがありFileVisitorます。インターフェイスをジェネリックにするポイントは何ですか?

ネット上のすべての例は、型を使用しFiles.walkFileTree()ていることを意味する使用方法を示していFileVisitor<Path>ます。しかし、私はこのインターフェースをPath. 他の種類のツリー (インメモリ ツリー?) をウォークするために使用できる可能がありますが、FileVisitorこれは適切ではないと感じていますFileVisitor。 Sを投げIOExceptionます。

では、型をパラメータ化する理由はありましたFileVisitorか?

4

2 に答える 2

5

GitHubを使用していますか? FileVisitorこれは、 を使用して GitHub に API を実装し、GitHub プロジェクトを探索/視覚化できる絶好の機会です。さらに言えば、ほとんどすべての SCC システムは、ファイル ロケータとして別のクラスを利用できます。

FileVisitor<ZipEntry>また、 zip ファイルのトラバースに a を使用するのはどうですか。

API が複数のオブジェクトをターゲットとして使用できる可能性がある場合は、API を汎用にするのが理にかなっています。ジェネリックにしないのは、ばかげていると考えるべき間違いだと思います。

于 2013-05-06T22:03:54.997 に答える
5

ジェネリックを使用すると、同じインターフェイスを他のタイプのパスに使用できます。次の (簡略化された) コード フラグメントに示すように、インターフェイスは次のようにうまく機能しますjava.io.File

FileVisitResult walk(File file, FileVisitor<File> visitor)
    throws IOException
{
    if (file.isDirectory()) {
        visitor.preVisitDirectory(file, null);
        for (File child : file.listFiles()) {
            walk(child, visitor);
        }
        return visitor.postVisitDirectory(file, null);
    } else {
        return visitor.visitFile(file, null);
    }
}
于 2013-05-06T22:04:28.123 に答える