0

私は本当にこれに対する答えを探しています。ディレクトリ ツリーをたどるだけの一般的なコードを作成したいと考えています。1 つのメソッドを含む単なる静的クラスである可能性があります。問題ありません。ディレクトリではない各ファイルに対して、何かを行います。この何かのインターフェイスを定義することがやるべきことだと思っていましたが (今のところ呼び出してFileActionInterface.performAction()います)、ディレクトリ ウォーカー コードをコーディングしてこのインターフェイス メソッドを呼び出す方法がわかりません (まだ存在しません)。「add Interface handler()」というメソッドを持つ他のJavaクラスを見て使用したことがあります。そのクラスは、実装されたインターフェースを実行します。何もドロップしないと、何も起こりません。

ここで正しい言葉をつかんですみません。このディレクトリ ウォーカー コードをコーディングして抽象コードを呼び出すにはどうすればよいですか?

PSこれらはすべて良い答えであり、そのようにマークしました。クラスに「addInterfaceHandler()」のようなメソッドがある場合、彼らはどのようにそれを行いますか? クラスには独自のインターフェイスの実装があると思いますが、おそらく空です。その後、add() メソッドを呼び出すときに、クラスの実装を置き換えるか、インターフェイス実装の配列のように追加します。

さまざまなソリューションを試してみます。

4

4 に答える 4

1

上記のインターフェースを実装するオブジェクトを渡します。

ウォーキング メソッドは、そのオブジェクトのメソッドを呼び出します。

Files.walkFileTreeFileVisitorとどのように連携するかに似ています。

非常に大まかに:

public class Walker {
    private Visitor v;
    public Walker(Visitor v) { this.v = v; }
    public walk(File dir) {
        // pseudo-code
        for (File f : dir.getFiles()) {
            if (f.isDir()) {
                walk(f);
            } else {
                v.performAction(f);
            }
        }
    }
}
于 2013-04-18T16:26:19.277 に答える
1
class DirIterator

  interface Callable
    method callback(file) // abstract
  end interface 

  method iterate (dir, callable) {
    for each file in dir
      if (file is Folder) then iterate(file, callable)
      else callable.callback(file)
  }

  // example use
  method main() {
    callable = new Callable{callback(file) {print(file.name)}}; // specify cb for this iteration
    dirIterator.iterate("root_dir_to_iterate/", callable); // start iteration
  }
end class
于 2013-04-18T16:28:49.870 に答える